Manuscrito 2.0. campo "tipos" en tsconfig.json


No entiendo el significado del campo types en tsconfig.json. En la documentación he leído tal texto:

        "types": {
          "description": "Type declaration files to be included in compilation. Requires TypeScript version 2.0 or later.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },

Por lo que entiendo, si instalo @types/express debería agregar dicha cadena en tsconfig.json

{
  "compilerOptions": {
     ...
     "types": ["lodash"]
   }
} 

Pero todo funciona bien sin ella. Y ahora no entiendo, ¿por qué necesito types campo

Author: Stalso, 2016-10-03

2 answers

A partir de TypeScript 2.* el 'tsconfig.json ' tiene las siguientes dos propiedades disponibles:

{
    'typeRoots': [],
    'types': [] 
}

Detallaré ambos en orden.


  1. 'typeRoots' especifica carpetas raíz en las que el transpiler debe buscar definiciones de tipo (por ejemplo: 'node_modules').

    • Si ha estado usando typescript, sabe que para las diferentes bibliotecas que no se han escrito con typescript, necesita definiciones para que el compilador reconozca global variables y tener soporte IntelliSense.

    • Esta cuestión ha sido abordada por proyectos (repos) como 'DefinatelyTyped' que utilizan herramientas como tsd o mecanografía módulo para descargar los tipos necesarios para su proyecto, pero también vienen con su propio archivo 'json' que debe mantenerse por separado.

    • Con TS2.* ahora puede obtener dependencias de definición usando 'npm'. Así que en lugar de usar una biblioteca de cli separada como tsd o tipificaciones, ahora puedes utilizar: npm i @types/{LIB} de esta manera, todas las dependencias se gestionan utilizando paquete.json y puede eliminar fácilmente la necesidad de otro archivo' json ' para mantener en su proyecto.


  1. 'types' son los nombres reales de las bibliotecas que se encontrarán en typeRoot.

    • Así que digamos que tiene la configuración predeterminada para typeRoots que se vería algo así como:

      "typeRoots": [
          "./node_modules/@types"
      ]
      
    • Supongamos que ahora desea usar jasmine como un marco de prueba para su proyecto, por lo que tiene su carpeta typeRoot configurada, todo lo que también 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", según se indica:

      "types": [
           "core-js",
           "jasmine",
           "requirejs",
           "chance"
      ]
      

Para concluir, básicamente le dices al compilador de TS la siguiente:

typeRoots : Necesita buscar tipografías en estas carpetas. tipos: En una de las carpetas proporcionadas anteriormente, encontrará definiciones para estos framworks (subcarpetas).

Así que usando el escenario anterior, y si añadimos 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!

 75
Author: Vlad Jerca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-26 04:20:31

No necesita el campo tipos necesariamente. Aquí está la parte importante a tener en cuenta de la documentación :

Por defecto todos los paquetes "@types " visibles están incluidos en su recopilacion. Paquetes en node_modules / @tipos de cualquier carpeta adjunta se consideran visibles

Por lo tanto, si ha seguido la convención o utilizado un conjunto de herramientas como npm para descargar paquetes @types, no necesita configurar typeRoots o types en su configuración, ya que funcionará fuera de la caja con la estructura de carpetas predeterminada.

 14
Author: Xcalibur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-15 01:52:16