예제 #1
0
        public string Generate()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append($"export interface {ClassName.ToTsInterfaceName()} ");
            sb.Append(GenerateBaseExtensionsCode());
            sb.AppendLine(" {");

            foreach (PropertyDeclarationSyntax prop in PropertyDeclarationSyntaxes)
            {
                if (prop.Modifiers.Any(s => s.IsKind(SyntaxKind.PrivateKeyword)))
                {
                    continue;
                }

                sb.Append($"  {prop.Identifier.Text.ToJsonPropName()}: ");
                string tsTypeEquivalent = null;
                switch (prop.Type)
                {
                case PredefinedTypeSyntax predefinedTypeSyntax:
                    tsTypeEquivalent = GetEquivalentTsType(predefinedTypeSyntax);
                    break;

                case IdentifierNameSyntax identifierNameSyntax:
                    tsTypeEquivalent = GetEquivalentTsType(identifierNameSyntax);
                    break;

                case GenericNameSyntax genericNameSyntax:
                    tsTypeEquivalent = GetEquivalentTsType(genericNameSyntax);
                    break;

                case NullableTypeSyntax nullableTypeSyntax:
                    tsTypeEquivalent = GetEquivalentTsType(nullableTypeSyntax);
                    break;

                case ArrayTypeSyntax arrayTypeSyntax:
                    tsTypeEquivalent = GetEquivalentTsType(arrayTypeSyntax);
                    break;

                case QualifiedNameSyntax qualifiedNameSyntax:
                case SimpleNameSyntax simpleNameSyntax:
                case NameSyntax nameSyntax:
                default:
                    throw new NotImplementedException($"{prop.Type} is not yet supported.");
                }

                sb.AppendLine($"{tsTypeEquivalent};");
            }

            sb.AppendLine("}");

            return(sb.ToString());
        }