Suche…


Syntax

  • Verwendet das JSON-Dateiformat
  • Kann auch Kommentare im JavaScript-Stil akzeptieren

Bemerkungen

Überblick

Das Vorhandensein einer Datei tsconfig.json in einem Verzeichnis gibt an, dass das Verzeichnis das Stammverzeichnis eines TypeScript-Projekts ist. Die Datei tsconfig.json gibt die Stammdateien und die Compileroptionen an, die zum Kompilieren des Projekts erforderlich sind.

Tsconfig.json verwenden

  • Durch Aufrufen von tsc ohne Eingabedateien sucht der Compiler in diesem Fall nach der Datei tsconfig.json, die im aktuellen Verzeichnis beginnt und die übergeordnete Verzeichniskette fortsetzt.
  • Durch Aufruf von tsc ohne Eingabedateien und einer Befehlszeilenoption --project (oder nur -p), die den Pfad eines Verzeichnisses angibt, das eine Datei tsconfig.json enthält. Wenn Eingabedateien in der Befehlszeile angegeben werden, handelt es sich um tsconfig.json-Dateien

Einzelheiten

Die Eigenschaft "compilerOptions" kann weggelassen werden. In diesem Fall werden die Standardwerte des Compilers verwendet. Siehe unsere vollständige Liste der unterstützten Compileroptionen .

Wenn in einer Datei "files" tsconfig.json "files" keine Eigenschaft "files" vorhanden ist, enthält der Compiler standardmäßig alle TypeScript-Dateien (* .ts oder * .tsx) im enthaltenden Verzeichnis und in den Unterverzeichnissen. Wenn eine Eigenschaft "files" vorhanden ist, sind nur die angegebenen Dateien enthalten.

Wenn die Eigenschaft "exclude" angegeben ist, enthält der Compiler alle TypeScript-Dateien (* .ts oder * .tsx) im übergeordneten Verzeichnis und den Unterverzeichnissen, mit Ausnahme der ausgeschlossenen Dateien oder Ordner.

Die Eigenschaft "files" kann nicht in Verbindung mit der Eigenschaft "exclude" verwendet werden. Wenn beide angegeben werden, hat die Eigenschaft "files" Vorrang.

Alle Dateien, auf die von den in der Eigenschaft "files" angegebenen Dateien verwiesen wird, sind ebenfalls enthalten. Wenn eine Datei B.ts von einer anderen Datei A.ts referenziert wird, kann B.ts ebenfalls nicht ausgeschlossen werden, es sei denn, die Referenzdatei A.ts ist ebenfalls in der Liste "Exclude" angegeben.

Eine tsconfig.json Datei darf vollständig leer sein, wodurch alle Dateien im tsconfig.json Verzeichnis und den Unterverzeichnissen mit den Standard-Compiler-Optionen kompiliert werden.

In der Befehlszeile angegebene Compiler-Optionen überschreiben die in der Datei tsconfig.json angegebenen.

Schema

Schema finden Sie unter: http://json.schemastore.org/tsconfig

Erstellen Sie ein TypeScript-Projekt mit tsconfig.json

Das Vorhandensein einer Datei " tsconfig.json " gibt an, dass das aktuelle Verzeichnis das Stammverzeichnis eines TypeScript-fähigen Projekts ist.

Das Initialisieren eines TypeScript-Projekts oder besser die Datei tsconfig.json kann mit dem folgenden Befehl ausgeführt werden:

tsc --init

Ab TypeScript v2.3.0 und höher wird standardmäßig die folgende Datei tsconfig.json erstellt:

{
  "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. */
  }
}

Die meisten, wenn nicht alle, Optionen werden automatisch generiert, wobei nur das Nötigste unkommentiert bleibt.

Ältere Versionen von TypeScript, wie zum Beispiel v2.0.x und niedriger, würden eine tsconfig.json wie folgt generieren:

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "noImplicitAny": false,
        "sourceMap": false
    }
}

compileOnSave

Das Festlegen einer Eigenschaft der obersten Ebene compileOnSave signalisiert der IDE, dass alle Dateien für eine bestimmte Datei tsconfig.json beim Speichern generiert werden.

{
    "compileOnSave": true,
    "compilerOptions": {
        ...
    },
    "exclude": [
        ...
    ]
}

Diese Funktion ist seit TypeScript 1.8.4 und höher verfügbar, muss jedoch direkt von IDEs unterstützt werden. Derzeit sind Beispiele für unterstützte IDEs:

Bemerkungen

Eine Datei tsconfig.json kann sowohl Zeilen- als auch Blockkommentare enthalten, wobei dieselben Regeln wie bei ECMAScript verwendet werden.

//Leading comment
{
    "compilerOptions": {
        //this is a line comment
        "module": "commonjs", //eol line comment
        "target" /*inline block*/ : "es5",
        /* This is a
        block
        comment */
    }
}
/* trailing comment */

Konfiguration für weniger Programmierfehler

Es gibt sehr gute Konfigurationen, um Typisierungen zu erzwingen und weitere hilfreiche Fehler zu erhalten, die standardmäßig nicht aktiviert sind.

{
  "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.
  }
}

Nicht genug? Wenn Sie ein Hardcoder sind und mehr wollen, können Sie Ihre TypeScript-Dateien mit tslint prüfen, bevor Sie sie mit tsc kompilieren. Prüfen Sie, wie Sie Tslint für noch strengeren Code konfigurieren können .

preserveConstEnums

Typescript unterstützt Costant-Aufzählungszeichen, die über const enum deklariert werden.

Dies ist normalerweise nur Syntaxzucker, da die Aufzählungszeichen in kompiliertem JavaScript eingebettet sind.

Zum Beispiel den folgenden Code

const enum Tristate {
    True,
    False,
    Unknown
}

var something = Tristate.True;

kompiliert zu

var something = 0;

Obwohl die Vorstelung profitieren von inlining, können Sie Aufzählungen lieber halten , auch wenn costant (dh: Sie Lesbarkeit auf Entwicklungscode wünschen kann), dies zu tun , Sie setzen in haben tsconfig.json die preserveConstEnums in die clausole compilerOptions zu true .

{
    "compilerOptions": {
        "preserveConstEnums" = true,
        ...
    },
    "exclude": [
        ...
    ]
}

Auf diese Weise würde das vorige Beispiel wie alle anderen Enumerationen kompiliert, wie im folgenden Snippet gezeigt.

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow