Estou usando muitas bibliotecas, tanto minhas quanto de terceiros. Vejo que o diretório "typings" contém um pouco do Jquery e WinRT ... mas como eles são criados?
fonte
Estou usando muitas bibliotecas, tanto minhas quanto de terceiros. Vejo que o diretório "typings" contém um pouco do Jquery e WinRT ... mas como eles são criados?
Existem algumas opções disponíveis, dependendo da biblioteca em questão, de como está escrita e de qual nível de precisão você está procurando. Vamos revisar as opções, em ordem decrescente de conveniência.
Sempre verifique DefinitelyTyped ( https://github.com/DefinitelyTyped/DefinitelyTyped ) primeiro. Este é um repositório da comunidade cheio de literalmente milhares de arquivos .d.ts e é muito provável que o que você está usando já esteja lá. Você também deve verificar o TypeSearch ( https://microsoft.github.io/TypeSearch/ ), que é um mecanismo de pesquisa para arquivos .d.ts publicados pelo NPM; isso terá um pouco mais de definições que DefinitelyTyped. Alguns módulos também estão enviando suas próprias definições como parte de sua distribuição NPM, para ver também se esse é o caso antes de tentar escrever suas próprias.
O TypeScript agora suporta o --allowJs
sinalizador e fará mais inferências baseadas em JS nos arquivos .js. Você pode tentar incluir o arquivo .js em sua compilação, juntamente com a --allowJs
configuração para verificar se isso fornece informações de tipo boas o suficiente. O TypeScript reconhecerá coisas como as classes no estilo ES5 e os comentários JSDoc nesses arquivos, mas poderá ser desativado se a biblioteca se inicializar de uma maneira estranha.
--allowJs
Se --allowJs
você obteve resultados decentes e deseja escrever um arquivo de definição melhor, você pode combinar --allowJs
com --declaration
para ver o "melhor palpite" do TypeScript nos tipos da biblioteca. Isso fornecerá um ponto de partida decente e poderá ser tão bom quanto um arquivo criado manualmente, se os comentários do JSDoc estiverem bem escritos e o compilador puder encontrá-los.
Se --allowJs
não funcionou, convém usar o dts-gen ( https://github.com/Microsoft/dts-gen ) para obter um ponto de partida. Essa ferramenta usa a forma de tempo de execução do objeto para enumerar com precisão todas as propriedades disponíveis. No lado positivo, isso tende a ser muito preciso, mas a ferramenta ainda não suporta a raspagem dos comentários do JSDoc para preencher outros tipos. Você executa assim:
npm install -g dts-gen
dts-gen -m <your-module>
Isso será gerado your-module.d.ts
na pasta atual.
Se você quiser fazer tudo mais tarde e ficar sem tipos por um tempo, no TypeScript 2.0, agora você pode escrever
declare module "foo";
que lhe permitirá import
o "foo"
módulo com tipo any
. Se você tem um global com o qual deseja lidar mais tarde, basta escrever
declare const foo: any;
o que lhe dará uma foo
variável.
--declarations
gera o.js
arquivo e o.d.ts
arquivo, o que significa que você só precisa executar uma única compilação.--allowJs
com--declaration
opções não pode ser combinada (testada no TypeScript 1.8 e 2.0). Se eu tentar, eu recebo: #error TS5053: Option 'allowJs' cannot be specified with option 'declaration'
Você pode usar
tsc --declaration fileName.ts
como Ryan descreve, ou pode especificardeclaration: true
abaixocompilerOptions
,tsconfig.json
assumindo que você já teve umtsconfig.json
sob seu projeto.fonte
tsc --declaration test.ts
, recebo o erroCannot find name...
para os tipos para os quais estou tentando criar um arquivo de declaração :) Então, preciso dos tipos antes de poder declará-los?declaration: true
ao seutsconfig.json
arquivo?A melhor maneira de lidar com isso (se um arquivo de declaração não estiver disponível no DefinitelyTyped ) é escrever declarações apenas para as coisas que você usa e não para a biblioteca inteira. Isso reduz muito o trabalho - além disso, o compilador está lá para ajudar, reclamando sobre os métodos ausentes.
fonte
Como Ryan diz, o compilador tsc possui uma opção
--declaration
que gera um.d.ts
arquivo a partir de um.ts
arquivo. Observe também que (salvo erros), o TypeScript deve ser capaz de compilar Javascript, para que você possa passar o código javascript existente para o compilador tsc.fonte
conforme descrito em http://channel9.msdn.com/posts/Anders-Hejlsberg-Steve-Lucco-and-Luke-Hoban-Inside-TypeScript às 00:33:52, eles criaram uma ferramenta para converter os metadados WebIDL e WinRT em TypeScript d.ts
fonte
Aqui está um PowerShell que cria um único arquivo de definição TypeScript, uma biblioteca que inclui vários
*.js
arquivos com JavaScript moderno.Primeiro, mude todas as extensões para
.ts
.Segundo, use o compilador TypeScript para gerar arquivos de definição. Haverá muitos erros de compilador, mas podemos ignorá-los.
Por fim, combine todos os
*.d.ts
arquivos em umindex.d.ts
, removendo asimport
instruções e removendo asdefault
de cada instrução de exportação.Isso termina com um único
index.d.ts
arquivo utilizável que inclui muitas das definições.fonte
Ao criar sua própria biblioteca, você pode criar
*.d.ts
arquivos usando otsc
comando (TypeScript Compiler) da seguinte maneira: (supondo que você esteja criando sua biblioteca nadist/lib
pasta)-d
(--declaration
): gera os*.d.ts
arquivos--declarationDir dist/lib
: Diretório de saída para arquivos de declaração gerados.--declarationMap
: Gera um mapa de origem para cada arquivo '.d.ts' correspondente.--emitDeclarationOnly
: Emita apenas arquivos de declaração '.d.ts'. (sem JS compilado)(veja os documentos para todas as opções do compilador de linha de comando)
Ou, por exemplo, no seu
package.json
:e depois execute:
yarn build:types
(ounpm run build:types
)fonte
d.ts
arquivos e poder usar interfaces. Você tem algum exemplo?*.d.ts
arquivos e colocá-los nadist/lib
pasta Você precisa de umtsconfig.json
arquivo na raiz do seu projeto, mas deve estar lá para que o projeto funcione de qualquer maneira.Eu procuraria um mapeamento existente de suas bibliotecas JS de terceiros que suportem Script # ou SharpKit. Os usuários desses compiladores cruzados de C # para .js terão enfrentado o problema que você enfrenta agora e podem ter publicado um programa de código aberto para varrer sua biblioteca de terceiros e converter em classes C # esqueléticas. Nesse caso, corte o programa do scanner para gerar o TypeScript no lugar de C #.
Caso contrário, traduzir uma interface pública C # para sua biblioteca de terceiros em definições TypeScript pode ser mais simples do que fazer o mesmo lendo o JavaScript de origem.
Meu interesse especial é a estrutura ExtJS RIA do Sencha e sei que existem projetos publicados para gerar uma interpretação em C # para Script # ou SharpKit
fonte