Vou começar a usar TypeScript
no meu projeto de cliente HTML, que pertence a um projeto MVC com um modelo de domínio de estrutura de entidade já existente. Quero que meus dois projetos (lado do cliente e lado do servidor) sejam totalmente separados, pois duas equipes trabalharão nisso ... JSON e REST são usados para comunicar objetos de um lado para outro.
Obviamente, meus domain
objetos no lado do cliente devem corresponder aos objetos no lado do servidor. No passado, eu normalmente fazia isso manualmente. Existe uma maneira de reutilizar minhas definições de classe C # (especialmente das POJO
classes no meu modelo de domínio) para criar as classes correspondentes no TypeScript "?
javascript
typescript
pabloelustondo
fonte
fonte
Respostas:
No momento, não há nada que mapeie C # para TypeScript. Se você tem muitos POCOs ou acha que eles podem mudar com frequência, pode criar um conversor - algo simples ao longo das linhas de ...
Para
Há também uma discussão no Codeplex sobre a geração automática de c # .
Apenas para manter as coisas atualizadas, o TypeLite pode gerar interfaces TypeScript a partir do C #:
http://type.litesolutions.net/
fonte
O Web Essentials permite compilar arquivos C # em arquivos TypeScript
.d.ts
ao salvar. Então você pode fazer referência às definições dos seus.ts
arquivos.fonte
TypeLite e T4TSs acima pareciam bons, basta escolher um, TypeLite, bifurcou-o para obter suporte para
Então eu precisava de interfaces C # e pensei que era hora de preparar minhas próprias coisas e escrevi um script T4 simples que apenas faz o que eu preciso. Também inclui Enums . Não é necessário repo, apenas <100 linhas de T4.
Uso
Nenhuma biblioteca, nenhum NuGet, apenas este arquivo T4 simples e simples - use "adicionar item" no Visual Studio e escolha qualquer modelo T4. Em seguida, cole isso no arquivo Adapte todas as linhas com "ACME". Para cada classe C #, adicione uma linha
A ordem importa, qualquer tipo conhecido será usado nas seguintes interfaces. Se você usar apenas interfaces, a extensão do arquivo poderá ser .d.ts . Para enumerações, você precisará de um arquivo .ts , pois uma variável é instanciada.
Personalização
Hackeie o script.
O próximo nível do script será criar a interface de serviço da classe MVC JsonController.
fonte
typeof(ParticleKind)
no seuEnum<T>
. Certamente isso deveria sertypeof(T)
? Também é preciso atualizaçãobool
a serboolean
para versões do texto dactilografado posterioresconst enum
s. Obrigado pelo exemplo. Foi muito próximo e me deu um resultado de trabalho muito mais rápido.Se você usa o vscode, pode usar minha extensão csharp2ts, que faz exatamente isso.
Você acabou de selecionar o código C # colado e executar o
Convert C# to TypeScript
comando na paleta de comandos Um exemplo de conversão:para
fonte
Aqui está a minha abordagem para resolvê-lo. Declare suas classes C # com um atributo e os arquivos .d.ts serão gerados (usando transformações T4). Há um pacote no nuget e a fonte está disponível no github . Ainda estou trabalhando no projeto, mas o suporte é bastante extenso.
fonte
Se você estiver usando o Visual Studio, adicione a extensão Typewriter.
Galeria do Visual Studio
Site / Documentação
Atualizar
Com o Web Essentials instalado no VS 2015, você pode clicar com o botão direito do mouse no arquivo de classe e, em seguida,> Web Essentials> Criar arquivo Typescript Intellisense no menu de contexto.
fonte
Experimente o framework Reinforced.Typings. Parece que resolve o seu problema.
Navegue até o seu POCO e adicione o
[TsInterface]
atributo acima deleDescubra o código TypeScript gerado no
%Your_Project_Directory%/Scripts/project.ts
arquivo e adicione-o ao projeto manualmenteproject.ts
no seu outro código TypeScript.Veja mais detalhes na wiki de documentação
fonte
Eu criei um pequeno utilitário que pode gerar interfaces TypeScript a partir de classes C #. Está disponível como um pacote NuGet . Documentação detalhada pode ser encontrada na página do projeto .
fonte
Por favor, dê uma olhada neste biblioteca Typewriter
Ele converte não apenas classes, enumerações, interfaces, etc., mas também os controladores de API, o que é simplesmente incrível.
Além disso, ele faz isso assim que você salva o arquivo .cs de origem, para que não precise acionar nenhuma ferramenta externa. Salve .cs e você será atualizado .ts
fonte
Eu tenho uma pequena solução que usa modelos T4 ( ver código-fonte ).
Você vai de qualquer CLR POCO:
Para uma interface TypeScript:
fonte
Você pode usar o projeto de código aberto NSwag : Na GUI, você pode selecionar a classe .NET de uma DLL .NET existente e gerar a interface TypeScript para ela.
O projeto também fornece ferramentas de linha de comando e suporte para modelos T4, bem como geração de código de cliente para controladores de API da Web ...
fonte
Se você precisar criar um arquivo separado para cada classe / interface TypeScript gerada (por exemplo, de uma "classe única por arquivo"), tente o TypeGen . É uma ferramenta que você pode usar no Console do Gerenciador de Pacotes para gerar arquivos TypeScript com base em suas classes / enums de C #. Atualmente, ele suporta:
além de alguns recursos adicionais. Também é de código aberto (você pode conferir no github ).
fonte
E o contrário?
Confira erecruit TypeScript Translator . Ele vem com suporte para C # pronto para uso, mas na verdade é baseado em modelo (usa Nunjucks para renderização), o que significa que pode gerar qualquer outra coisa - VB.NET, F #, C ++, XML, SQL - o que você puder codificar com um modelo.
Funciona como um programa de console .NET, programa NodeJS (para aqueles que não estão no Windows) ou como uma extensão do Visual Studio , completa com a funcionalidade de gerar em salvar. E inclui suporte ao MSBuild, apenas para deixar seu servidor de compilação feliz. :-)
fonte
Você também pode usar isso: https://github.com/pankleks/TypeScriptBuilder
Essa pequena biblioteca gera a definição de tipo TypeScript com base nos tipos C #. Use-o diretamente no seu projeto C # de back-end para gerar código para o seu projeto TypeScript de front-end. Você também pode escrever um aplicativo de console pequeno para gerar código usando ferramentas de pré-compilação.
Funciona na estrutura Full & NET Core!
Instalar por nuget:
Install-Package TypeScriptBuilder
Funcionalidades suportadas
any
para tipos que não podem ser convertidosMais descrição: https://github.com/pankleks/TypeScriptBuilder/blob/master/README.md
fonte
TypeScriptBuilder
e parece excelente até agora; viva o suporte do .NET Core!Os caras dão uma olhada em https://github.com/reinforced/ Reinforced.Typings . Eu tenho jogado com modelos typelite e t4 nos últimos dias e acabei com este projeto. É super simples e funciona como um encanto. Apenas pegue o pacote, modifique o arquivo de configuração (por 10 segundos) e construa. Tudo é feito automaticamente, sem problemas. Abençoe o autor!
O ruim dos modelos T4 é que, uma vez que você constrói a partir do VS, os assemblies digitalizados ficam bloqueados e você deve reiniciar o VS (o quão tolo é isso?). Existem algumas soluções alternativas no T4 Toolbox + algumas diretivas de limpeza do VS, mas nenhuma delas funcionou para mim.
fonte
Eu gosto da solução citykid. Eu tinha ampliado um pouco. Portanto, a solução também se baseia na técnica de codegeneração com modelos T4.
Ele pode gerar tipos comuns de TypeScript e declarações de ambiente.
Ele suporta implementações de herança e interface.
Suporta genéricos, matrizes e listas como campos de tipo.
Também se traduz em tipos TypeScript que não são mencionados explicitamente na configuração (por exemplo, importamos o tipo A e na saída TS, você pode encontrar outros tipos: tipos de campos, tipos básicos e interfaces).
Você também pode substituir o nome do tipo.
Enums também são suportadas.
Exemplo de uso (você pode encontrá-lo no repositório do projeto):
E você obterá uma saída
Verifique a solução completa aqui: https://bitbucket.org/chandrush/cst4ts
fonte
Você também pode usar o Bridge.net. Desde a versão 1.7, ele suporta a geração de definições TypeScript para tipos de C #. Consulte http://bridge.net/docs/generate-typescript-definitions/
fonte
Eu também gostei muito da resposta do @ citykid, então eu o estendi para criar um espaço de nome inteiro por vez. Basta colocar as classes POCO no espaço para nome e reconstruir os modelos T4. Eu gostaria de saber como gerar arquivos separados para cada um, mas isso não é o fim do mundo.
Você precisa fazer referência aos arquivos .DLL na parte superior (onde estão as classes que deseja) e mencionar os espaços para nome. Todas as linhas para editar estão marcadas com ACME. Principais elogios para @citykid, agradeço!
fonte
Minha solução foi escrever um pequeno utilitário de codegen que simplesmente pega um assembly de projeto (e faz referência a assemblies) e inicia a varredura de tipos envolvidos na interação entre texto datilografado e c #. Este utilitário gera javascript e d.ts ... A ferramenta é chamada no evento pós-compilação ... funciona como um encanto!
fonte
Se estiver interessado, você pode usar o TypedRpc . Seu objetivo não é apenas criar as interfaces no TypeScript, mas criar toda a comunicação com o serviço em .Net usando o protocolo JsonRpc.
Exemplo para uma classe no servidor:
Uso do código TypeScript gerado:
Confira https://github.com/Rodris/TypedRpc para outros exemplos de como usá-lo.
fonte
Os Geradores de clientes da API da Web do ASP.NET podem ser mais úteis, menos sobrecarga do que o swagger toolchain e outros durante o SDLC.
Embora os programadores geralmente usem o WebApiClientGen para gerar códigos de API do cliente, este projeto também fornece o POCO2TS.exe, um programa de linha de comando que gera interfaces TypsScript a partir das classes POCO. Você pode usar o Poco2ts.exe ou o componente poco2ts para integrar a geração de código ao seu pipeline de compilação.
fonte
Se você deseja convertê-lo através do node.js, pode usar este pacote (csharp-to-typescript). https://www.npmjs.com/package/csharp-to-typescript
código-fonte: https://github.com/YuvrajSagarRana/csharp-to-typescript
fonte
Se você estiver usando o VSCode, poderá dar uma olhada nessa extensão C # para TypeScript
Veja como eu posso convertê-lo do código C # em apenas um clique. Obviamente, nem todas as classes serão convertidas, como a fábrica, mas elas são boas o suficiente para o lado do cliente. Nós apenas precisamos da forma dos dados. Às vezes, se eu precisar usar o padrão de visitante, decorarei com métodos adicionais necessários. Demorou apenas 5 segundos para fazer isso. Comparando com um minuto acima, eu poderia dizer que é uma grande vitória.
Veja mais detalhes na minha postagem no blog
fonte