TypeScript
tsconfig.json
Buscar..
Sintaxis
- Utiliza el formato de archivo JSON
- También puede aceptar comentarios de estilo JavaScript
Observaciones
Visión general
La presencia de un archivo tsconfig.json en un directorio indica que el directorio es la raíz de un proyecto de TypeScript. El archivo tsconfig.json especifica los archivos raíz y las opciones del compilador necesarias para compilar el proyecto.
Utilizando tsconfig.json
- Al invocar tsc sin archivos de entrada, en cuyo caso el compilador busca el archivo tsconfig.json que comienza en el directorio actual y continúa en la cadena del directorio principal.
- Al invocar tsc sin archivos de entrada y una opción de línea de comando --project (o simplemente -p) que especifica la ruta de un directorio que contiene un archivo tsconfig.json. Cuando los archivos de entrada se especifican en la línea de comando, los archivos tsconfig.json son
Detalles
La propiedad "compilerOptions"
se puede omitir, en cuyo caso se utilizan los valores predeterminados del compilador. Vea nuestra lista completa de opciones de compilador compatibles.
Si no hay una propiedad de "files"
en un tsconfig.json, el compilador incluye de manera predeterminada todos los archivos de TypeScript (* .ts o * .tsx) en el directorio y subdirectorios que lo contienen. Cuando una propiedad de "archivos" está presente, solo se incluyen los archivos especificados.
Si se especifica la propiedad "exclude"
, el compilador incluye todos los archivos de TypeScript (* .ts o * .tsx) en el directorio y subdirectorios que contienen, excepto aquellos archivos o carpetas que están excluidos.
La propiedad "files"
no se puede utilizar junto con la propiedad "excluir". Si se especifican ambos, entonces la propiedad "archivos" tiene prioridad.
También se incluyen los archivos a los que hacen referencia los especificados en la propiedad "files"
. De manera similar, si a otro archivo A se hace referencia a un archivo B.ts, entonces no se puede excluir a B.ts a menos que también se especifique el archivo de referencia A.ts en la lista "excluir".
Se tsconfig.json
archivo tsconfig.json
esté completamente vacío, lo que compila todos los archivos en el directorio que contiene y los subdirectorios con las opciones de compilador predeterminadas.
Las opciones de compilador especificadas en la línea de comando anulan las especificadas en el archivo tsconfig.json.
Esquema
El esquema se puede encontrar en: http://json.schemastore.org/tsconfig
Crear proyecto de TypeScript con tsconfig.json
La presencia de un archivo tsconfig.json indica que el directorio actual es la raíz de un proyecto habilitado para TypeScript.
La inicialización de un proyecto de TypeScript, o mejor poner el archivo tsconfig.json, se puede hacer a través del siguiente comando:
tsc --init
A partir de TypeScript v2.3.0 y superior, se creará el siguiente tsconfig.json de forma predeterminada:
{
"compilerOptions": {
/* Basic Options */
"target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'commonjs', 'amd', 'system', 'umd' or 'es2015'. */
// "lib": [], /* Specify library files to be included in the compilation: */
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
// "declaration": true, /* Generates corresponding '.d.ts' file. */
// "sourceMap": true, /* Generates corresponding '.map' file. */
// "outFile": "./", /* Concatenate and emit output to single file. */
// "outDir": "./", /* Redirect output structure to the directory. */
// "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
// "removeComments": true, /* Do not emit comments to output. */
// "noEmit": true, /* Do not emit outputs. */
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
/* Strict Type-Checking Options */
"strict": true /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* Enable strict null checks. */
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
/* Additional Checks */
// "noUnusedLocals": true, /* Report errors on unused locals. */
// "noUnusedParameters": true, /* Report errors on unused parameters. */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
/* Module Resolution Options */
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
// "typeRoots": [], /* List of folders to include type definitions from. */
// "types": [], /* Type declaration files to be included in compilation. */
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
/* Source Map Options */
// "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
// "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
/* Experimental Options */
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
}
}
La mayoría, si no todas, las opciones se generan automáticamente con solo las necesidades básicas que quedan sin comentarios.
Las versiones anteriores de TypeScript, como por ejemplo v2.0.x y versiones inferiores, generarían un tsconfig.json como este:
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noImplicitAny": false,
"sourceMap": false
}
}
compileOnSave
Establecer una propiedad de nivel superior compileOnSave
señala al IDE para generar todos los archivos para un tsconfig.json dado al guardar.
{
"compileOnSave": true,
"compilerOptions": {
...
},
"exclude": [
...
]
}
Esta función está disponible desde TypeScript 1.8.4 y posteriores, pero debe ser compatible directamente con IDE. Actualmente, los ejemplos de IDE soportados son:
- Visual Studio 2015 con actualización 3
- JetBrains WebStorm
- Átomo con atom-mecanografiado
Comentarios
Un archivo tsconfig.json puede contener tanto comentarios de línea como de bloque, utilizando las mismas reglas que ECMAScript.
//Leading comment
{
"compilerOptions": {
//this is a line comment
"module": "commonjs", //eol line comment
"target" /*inline block*/ : "es5",
/* This is a
block
comment */
}
}
/* trailing comment */
Configuración para menos errores de programación.
Hay configuraciones muy buenas para forzar la escritura y obtener errores más útiles que no están activados de forma predeterminada.
{
"compilerOptions": {
"alwaysStrict": true, // Parse in strict mode and emit "use strict" for each source file.
// If you have wrong casing in referenced files e.g. the filename is Global.ts and you have a /// <reference path="global.ts" /> to reference this file, then this can cause to unexpected errors. Visite: http://stackoverflow.com/questions/36628612/typescript-transpiler-casing-issue
"forceConsistentCasingInFileNames": true, // Disallow inconsistently-cased references to the same file.
// "allowUnreachableCode": false, // Do not report errors on unreachable code. (Default: False)
// "allowUnusedLabels": false, // Do not report errors on unused labels. (Default: False)
"noFallthroughCasesInSwitch": true, // Report errors for fall through cases in switch statement.
"noImplicitReturns": true, // Report error when not all code paths in function return a value.
"noUnusedParameters": true, // Report errors on unused parameters.
"noUnusedLocals": true, // Report errors on unused locals.
"noImplicitAny": true, // Raise error on expressions and declarations with an implied "any" type.
"noImplicitThis": true, // Raise error on this expressions with an implied "any" type.
"strictNullChecks": true, // The null and undefined values are not in the domain of every type and are only assignable to themselves and any.
// To enforce this rules, add this configuration.
"noEmitOnError": true // Do not emit outputs if any errors were reported.
}
}
¿No es suficiente? Si usted es un programador de hardware y desea más, puede que le interese comprobar los archivos de TypeScript con tslint antes de compilarlos con tsc. Verifique cómo configurar tslint para un código aún más estricto .
preserveConstEnums
Typescript soporta enumerables de costant, declarados a través de const enum
.
Por lo general, esto solo es sintaxis de azúcar, ya que los enumerados de costant están incluidos en JavaScript compilado.
Por ejemplo el siguiente código
const enum Tristate {
True,
False,
Unknown
}
var something = Tristate.True;
compila a
var something = 0;
Aunque el rendimiento se beneficia de la incorporación, es posible que prefiera mantener los enumerados incluso si es costoso (es decir, puede desear legibilidad en el código de desarrollo). Para hacerlo, debe configurar tsconfig.json la preserveConstEnums
preserveConstEnums en el compilerOptions
para que sea true
.
{
"compilerOptions": {
"preserveConstEnums" = true,
...
},
"exclude": [
...
]
}
De esta manera, el ejemplo anterior se compilaría como cualquier otro enum, como se muestra en el siguiente fragmento de código.
var Tristate;
(function (Tristate) {
Tristate[Tristate["True"] = 0] = "True";
Tristate[Tristate["False"] = 1] = "False";
Tristate[Tristate["Unknown"] = 2] = "Unknown";
})(Tristate || (Tristate = {}));
var something = Tristate.True