¿Cómo se produce un archivo de definición de "tipos" .d.ts a partir de una biblioteca JavaScript existente?
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?
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 --allowJs
bandera y realizará más inferencias basadas en JS en archivos .js. Puede intentar incluir el archivo .js en su compilación junto con la --allowJs
configuració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 --allowJs
obtuvo resultados decentes y desea escribir un archivo de mejor definición usted mismo, puede combinarlo --allowJs
para --declaration
ver 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 --allowJs
no 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.ts
en 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á import
el "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 foo
variable.
Puede usar tsc --declaration fileName.ts
como describe Ryan, o puede especificar declaration: true
debajo compilerOptions
suponiendo tsconfig.json
que ya ha tenido un tsconfig.json
proyecto.