2016-10-03 3 views
20

Ich verstehe nicht die Bedeutung von types Feld in tsconfig.json. In Dokumentation habe ich solche Texte lesen:Typoskript 2.0. "Typen" Feld in tsconfig.json

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

Was, wie ich sie verstehe, wenn ich @types/express installieren sollte ich eine solche Zeichenfolge hinzufügen in tsconfig.json

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

aber alles funktioniert, ohne es in Ordnung. Und jetzt verstehe ich nicht, warum ich brauche types Feld

Antwort

59

Ab Typoskript 2. * die ‚tsconfig.json‘ hat die beiden folgenden Eigenschaften zur Verfügung:

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

Ich werde Detail sowohl in Ordnung.


  1. 'typeRoots' gibt Stammordner, in dem die Transpiler für Typdefinitionen aussehen sollte (zB: 'node_modules').

    • Wenn Sie Typoskript mit worden sind, wissen Sie, dass für verschiedene Bibliotheken, die Typoskript geschrieben wurden nicht verwenden, können Sie Definitionen, um für den Compiler brauchen globale Variablen zu erkennen und IntelliSense-Unterstützung zu haben.

    • Dieses Problem wurde durch Projekte (repos) wie ‚DefinatelyTyped‘, die Werkzeuge wie tsd oder Typisierungen Modul Typisierungen für Ihr Projekt erforderlich zum Download verwenden in Angriff genommen, aber sie kommen auch mit ihre eigene JSON-Datei, die separat gepflegt werden muss.

    • Mit TS2. * Können Sie Definitionsabhängigkeiten jetzt mit 'npm' abrufen. Anstatt also eine separate cli Bibliothek verwenden wie tsd oder Typisierungen, können Sie jetzt einfach nutzen: npm i @types/{LIB} diese Weise werden alle Abhängigkeiten verwaltet mit package.json und man kann leicht beseitigen die Notwendigkeit einer anderen JSON-Datei, die Sie in Ihrem Projekt pflegen müssen.


  1. 'Typen' sind die eigentlichen Bibliotheksnamen, die in der typeRoot gefunden wird.

    • also lassen Sie uns sagen, dass Sie die Standardkonfiguration für typeRoots haben, die wie etwas aussehen würde:

      "typeRoots": [ 
          "./node_modules/@types" 
      ] 
      
    • lassen Sie uns sagen Sie jetzt Jasmin als Test-Framework für Ihr Projekt verwenden möchten, so haben Sie Ihre typeRoot Ordner konfiguriert, alles, was Sie jetzt zu tun ist, auszuführen: npm i @types/jasmine --save-dev

    • nach der Definition Paket, das Sie gerade yo konfigurieren müssen installiert ist, ur Eigenschaft 'Typen' in 'tsconfig.json' wie folgt:

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

Abschließend sagen Sie grundsätzlich den TS-Compiler die folgende:

typeRoots: Sie müssen nach Typisierungen in diesen Ordnern suchen. Typen: In einem der oben genannten Ordner finden Sie Definitionen für diese Framworks (Unterordner).

So mit dem obigen Szenario, und wenn wir fügen Sie eine weitere Wurzel:

"typeRoots": [ 
    "./node_modules/@types", 
    "./custom_definitions" 
], 
"types": [ 
    "jasmine", 
] 

TS jetzt Definitionsdateien in

./node_modules/@types/jasmine

oder

aussehen

./custom_definitions/jasmine

Hoffe, das hilft!

+0

Sehr informativ, danke! Brauchen wir das noch an der Spitze der ts-Dateien? /// bedouger

+0

Wenn Sie sich für das Typsystem entscheiden, Nein. Ich persönlich habe keine Referenzen mehr in meinen Projekten. –

+0

Weißt du, warum das bei bestimmten Typen wie Moment oder Sinon nicht funktioniert, aber für andere? – Michael

12

Sie brauchen die Typen Feld nicht unbedingt. Hier ist der wichtige Teil der documentation zu beachten:

standardmäßig alle sichtbar „@types“ Pakete enthalten sind, in Ihrer Kompilierung. Pakete in node_modules/@ Arten von jeder übergeordneten Ordner sind

So sichtbar gilt, wenn Sie Konvention oder verwendet, um ein Werkzeug gesetzt wie npm gefolgt @types Pakete herunterzuladen, müssen Sie nicht typeRoots konfigurieren oder Typen in Ihrer Konfiguration, wie es aus der Box mit der Standard-Ordnerstruktur funktionieren wird.

Verwandte Themen