¿Cómo se produce un archivo de definición de "tipos" .d.ts a partir de una biblioteca JavaScript existente?

Resuelto Hotrodmonkey asked hace 12 años • 10 respuestas

Estoy usando muchas bibliotecas, tanto propias como de terceros. Veo que el directorio "typings" contiene algunos para Jquery y WinRT... pero ¿cómo se crean?

Hotrodmonkey avatar Oct 02 '12 16:10 Hotrodmonkey
Aceptado

Hay algunas opciones disponibles según la biblioteca en cuestión, cómo está escrita y qué nivel de precisión está buscando. Repasemos las opciones, en orden aproximadamente descendente de conveniencia.

Quizás ya exista

Siempre verifique DefinitelyTyped ( https://github.com/DefinitelyTyped/DefinitelyTyped ) primero. Este es un repositorio comunitario lleno de literalmente miles de archivos .d.ts y es muy probable que lo que estás usando ya esté allí. También debe consultar TypeSearch ( https://microsoft.github.io/TypeSearch/ ), que es un motor de búsqueda de archivos .d.ts publicados por NPM; esto tendrá un poco más de definiciones que DefinitelyTyped. Algunos módulos también incluyen sus propias definiciones como parte de su distribución NPM, así que vea también si ese es el caso antes de intentar escribir el suyo propio.

Quizás no necesites uno

TypeScript ahora admite la --allowJsbandera y realizará más inferencias basadas en JS en archivos .js. Puede intentar incluir el archivo .js en su compilación junto con la --allowJsconfiguración para ver si esto le brinda información de tipo suficientemente buena. TypeScript reconocerá cosas como clases de estilo ES5 y comentarios JSDoc en estos archivos, pero puede fallar si la biblioteca se inicializa de una manera extraña.

Comience con--allowJs

Si --allowJsobtuvo resultados decentes y desea escribir un archivo de mejor definición usted mismo, puede combinarlo --allowJspara --declarationver la "mejor suposición" de TypeScript sobre los tipos de biblioteca. Esto le dará un punto de partida decente y puede ser tan bueno como un archivo escrito a mano si los comentarios de JSDoc están bien escritos y el compilador pudo encontrarlos.

Comience con dts-gen

Si --allowJsno funcionó, es posible que desee utilizar dts-gen ( https://github.com/Microsoft/dts-gen ) para obtener un punto de partida. Esta herramienta utiliza la forma del objeto en tiempo de ejecución para enumerar con precisión todas las propiedades disponibles. En el lado positivo, esto tiende a ser muy preciso, pero la herramienta aún no admite la extracción de comentarios JSDoc para completar tipos adicionales. Ejecutas esto así:

npm install -g dts-gen
dts-gen -m <your-module>

Esto se generará your-module.d.tsen la carpeta actual.

Presiona el botón de posponer

Si solo desea hacerlo todo más tarde y no escribir por un tiempo, en TypeScript 2.0 ahora puede escribir

declare module "foo";

que le permitirá importel "foo"módulo con tipo any. Si tiene un problema global con el que desea tratar más adelante, simplemente escriba

declare const foo: any;

lo que te dará una foovariable.

Ryan Cavanaugh avatar Oct 02 '2012 17:10 Ryan Cavanaugh

Puede usar tsc --declaration fileName.tscomo describe Ryan, o puede especificar declaration: truedebajo compilerOptionssuponiendo tsconfig.jsonque ya ha tenido un tsconfig.jsonproyecto.

JayKan avatar Aug 04 '2016 00:08 JayKan