¿Cómo se puede producir una .d.ts "tipificaciones" archivo de definición a partir de una biblioteca de JavaScript?

StackOverflow https://stackoverflow.com//questions/12687779

  •  12-12-2019
  •  | 
  •  

Pregunta

Estoy usando un montón de bibliotecas tanto en mi propia y la 3ª parte.Yo veo la "tipificaciones" directorio contiene algunos de Jquery y WinRT...pero ¿cómo se crea?

¿Fue útil?

Solución

Hay un par de opciones disponibles para usted dependiendo de la biblioteca en cuestión, cómo se escribe, y qué nivel de precisión que usted está buscando.Vamos a revisar las opciones, aproximadamente en el orden descendente de conveniencia.

Tal Vez Ya Existe

Compruebe siempre DefinitelyTyped (https://github.com/DefinitelyTyped/DefinitelyTyped) en primer lugar.Esta es una comunidad repo completo de, literalmente, miles de .d.archivos de ts y es muy probable que la cosa está utilizando ya está ahí.También debe comprobar TypeSearch (https://microsoft.github.io/TypeSearch/), que es un motor de búsqueda para NPM-publicado .d.archivos de ts;esto va a tener un poco más de las definiciones de DefinitelyTyped.Algunos módulos son también el envío de sus propias definiciones, como parte de su MECANISMO nacional de prevención de distribución, así también a ver si es el caso, antes de tratar de escribir su propio.

Tal vez Usted no Necesita Uno

Manuscrito ahora es compatible con el --allowJs bandera y hará que más de la JS-basado en inferencias en .js archivos.Usted puede intentar incluyendo la .archivo js en su compilación junto con el --allowJs configuración para ver si esto le da a usted suficientemente bueno tipo de información.Los manuscritos reconocer las cosas como ES5-las clases de estilo y JSDoc comentarios en estos archivos, pero puede que se tropezó si la biblioteca se inicializa a sí mismo de una manera extraña.

Empezar Con --allowJs

Si --allowJs le dio buenos resultados y se desea escribir un mejor archivo de definición de sí mismo, usted puede combinar --allowJs con --declaration para ver el Manuscrito de la "mejor estimación" en los tipos de la biblioteca.Esto le dará un punto de partida decente, y puede ser tan buena como la de una mano-autor del archivo si el JSDoc comentarios son bien escrito y el compilador era capaz de encontrarlos.

Empezar con dts-gen

Si --allowJs no funciona, es posible que desee utilizar dts-gen (https://github.com/Microsoft/dts-gen para obtener un punto de partida.Esta herramienta utiliza el tiempo de ejecución de la forma del objeto con precisión enumerar todas las propiedades disponibles.En el lado positivo de esto tiende a ser muy exacta, pero la herramienta no es compatible aún con raspado de la JSDoc comentarios para rellenar tipos adicionales.Ejecutar esta así:

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

Esto va a generar your-module.d.ts en la carpeta actual.

Golpear el Botón de Repetición

Si sólo quieres hacer todo más tarde y sin tipos, por un tiempo, en el Manuscrito 2.0 ahora se puede escribir

declare module "foo";

que te permitirá import el "foo" módulo con el tipo any.Si usted tiene un mundial se desea tratar más tarde, acaba de escribir

declare const foo: any;

que le dará un foo variable.

Otros consejos

Usted puede utilizar tsc --declaration fileName.ts como Ryan se describe, o puede especificar declaration: true bajo compilerOptionsen su tsconfig.json suponiendo que usted ya haya tenido un tsconfig.json marco de su proyecto.

La mejor manera de lidiar con esto (si un archivo de declaración no está disponible en definitivamentetyped ) es paraEscribe declaraciones solo por las cosas que usa en lugar de toda la biblioteca.Esto reduce mucho el trabajo, y además el compilador está ahí para ayudar al quejarse de métodos faltantes.

Como dice Ryan, el compilador TSC tiene un conmutador --declaration que genera un archivo .d.ts de un archivo .ts.También tenga en cuenta que (errores de BETRS) se supone que puede compilar JavaScript, por lo que puede pasar el código JavaScript existente al compilador TSC.

Como se describe en http://channel9.msdn.COM / Publicaciones / Anders-Hejlsberg-Steve-Lucco-and-Luke-Hoban-Interior-Typyscript A 00:33:52 Habían construido una herramienta para convertir a Webidl y WinRT Metadata en TypeScript D.TS

He aquí algunos de PowerShell que se crea un único Manuscrito del archivo de definición de una biblioteca que incluye varios *.js los archivos con JavaScript moderno.

En primer lugar, el cambio de todas las extensiones a .ts.

Get-ChildItem | foreach { Rename-Item $_ $_.Name.Replace(".js", ".ts") }

En segundo lugar, utilizar el Manuscrito compilador para generar los archivos de definición.Habrá un montón de errores del compilador, pero podemos ignorarlos.

Get-ChildItem | foreach { tsc $_.Name  }

Finalmente, se combinan todos los *.d.ts archivos en uno solo index.d.ts, la eliminación de la import las declaraciones y la eliminación de la default de cada instrucción de exportación.

Remove-Item index.d.ts; 

Get-ChildItem -Path *.d.ts -Exclude "Index.d.ts" | `
  foreach { Get-Content $_ } | `
  where { !$_.ToString().StartsWith("import") } | `
  foreach { $_.Replace("export default", "export") } | `
  foreach { Add-Content index.d.ts $_ }

Esto termina con un único utilizable index.d.ts archivo que incluye muchas de las definiciones.

Buscaría un mapeo existente de sus bibliotecas de JS de tercera parte que admiten el script # o Sharpkit.Los usuarios de estos compiladores cruzados C # a .js habrán enfrentado al problema que enfrentó ahora y podría haber publicado un programa de código abierto para escanear su liber de terceros y convertir en las clases de Skeleton C #.Si es así, haga clic en el programa de escáner para generar TypeScript en lugar de C #.

Fallar que, traducir una interfaz pública C # para su LIB de tercera parte en las definiciones de TypeScript puede ser más sencilla que hacer lo mismo al leer la fuente JavaScript.

Mi interés especial es el marco de RIA EXTJS de Sencha y sé que ha habido proyectos publicados para generar una interpretación C # para el script # o Sharpkit

A la hora de crear su propia biblioteca, puede crear *.d.ts archivos mediante el uso de la tsc (Manuscrito Compilador) comando así:(suponiendo que la construcción de su biblioteca a la dist/lib carpeta)

tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly
  • -d (--declaration):genera el *.d.ts los archivos
  • --declarationDir dist/lib:Directorio de salida para generar la declaración de los archivos.
  • --declarationMap:Genera un sourcemap para cada 'correspondiente.d.ts' archivo.
  • --emitDeclarationOnly:Sólo las emisiones".d.ts declaración de los archivos.(no compilado JS)

(consulte la docs para todos compilador de línea de comando opciones)

O por ejemplo en su package.json:

"scripts": {
    "build:types": "tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly",
}

y, a continuación, ejecute: yarn build:types (o npm run build:types)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top