Typescript 2.0. Campo "types" en tsconfig.json
typescript-typings typescript2.0 (2)
A partir de TypeScript 2. * el ''tsconfig.json'' tiene las siguientes dos propiedades disponibles:
{
''typeRoots'': [],
''types'': []
}
Detallaré ambos en orden.
''typeRoots'' especifica las carpetas raíz en las que el transpiler debe buscar las definiciones de tipo (por ejemplo: ''node_modules'').
Si ha estado usando mecanografiado, sabe que para bibliotecas diferentes que no se han escrito utilizando mecanografiado, necesita definiciones para que el compilador pueda reconocer variables globales y soporte de IntelliSense.
Este problema ha sido abordado por proyectos (repos) tales como ''DefinatelyTyped'' que usan herramientas como tsd o el módulo de typings para descargar los typings necesarios para su proyecto, pero también vienen con su propio archivo ''json'' que debe mantenerse por separado.
Con TS2. * Ahora puede buscar dependencias de definición usando ''npm''. Entonces, en lugar de usar una biblioteca cli separada como tsd o typings , ahora puedes usar:
npm i @types/{LIB}
esta manera, todas las dependencias se administran usando package.json y puedes eliminar fácilmente la necesidad de otro ''json'' archivo para mantener en su proyecto.
''tipos'' son los nombres reales de la biblioteca que se encontrarán en el tipo raíz.
así que digamos que tiene la configuración predeterminada para typeRoots que se parecería a algo así como:
"typeRoots": [ "./node_modules/@types" ]
digamos que ahora quiere usar jazmín como marco de prueba para su proyecto, por lo que tiene configurada su carpeta typeRoot , todo lo que tiene que hacer ahora es ejecutar:
npm i @types/jasmine --save-dev
después de instalar el paquete de definición, solo necesita configurar su propiedad ''types'' en ''tsconfig.json'' de la siguiente manera:
"types": [ "core-js", "jasmine", "requirejs", "chance" ]
Para concluir, básicamente le dice al compilador de TS lo siguiente:
typeRoots : necesita buscar typings en estas carpetas. tipos : en una de las carpetas proporcionadas anteriormente, encontrará definiciones para estos archivos framworks (subcarpetas).
Entonces, usando el escenario anterior, y si agregamos otra raíz:
"typeRoots": [
"./node_modules/@types",
"./custom_definitions"
],
"types": [
"jasmine",
]
TS ahora buscará archivos de definición en
./node_modules/@types/jasmine
o
./custom_definitions/jasmine
¡Espero que esto ayude!
No entiendo el significado del campo types
en tsconfig.json
. En la documentación, he leído dicho texto:
"types": {
"description": "Type declaration files to be included in compilation. Requires TypeScript version 2.0 or later.",
"type": "array",
"items": {
"type": "string"
}
},
Hasta ahora, como entiendo si instalo @types/express
, debería agregar esa cadena en tsconfig.json
{
"compilerOptions": {
...
"types": ["lodash"]
}
}
pero todo funciona bien sin eso. Y ahora no entiendo, ¿por qué necesito el campo de types
No necesita el campo de tipos necesariamente. Aquí está la parte importante a tener en cuenta de la documentation :
Por defecto, todos los paquetes visibles "@types" están incluidos en su compilación. Los paquetes en node_modules / @ types de cualquier carpeta adjunta se consideran visibles
Por lo tanto, si ha seguido las convenciones o ha utilizado un conjunto de herramientas como npm para descargar paquetes de tipo @types, no necesita configurar tipos o tipos en su configuración, ya que funcionará de forma predeterminada con la estructura de carpetas predeterminada.