2017-05-12 1 views
0

Wenn wir Bibliotheken typedefinition (.d.ts) -Dateien verwenden, wie hängt Typoskript die Definition dessen, was wir importieren, mit dem entsprechenden Typ zusammen?Wie hängt Typescript die Typdefinition für das, was wir importieren, mit der entsprechenden Implementierung ab?

Zum Beispiel, wenn wir:

npm install @types/chai @types/mocha --save-dev 

Dann innen bar.spec.js:

import { expect } from 'chai'; 

Typoskript verstehen jetzt die typisierte Fassade für expect? Welchen Prozess durchläuft dies?

Antwort

1

Typdefinitionen sind meiner Meinung nach ziemlich komplex, mit einer langen Evolutionsgeschichte.

In diesem Fall node_modules/@types ist eine Art eine eingebaute „Typ root“ so weiß TS, wenn Sie einen nicht-relativen Modul importieren (ex "chai" ist nicht relativ, "./chai" relativ ist) in node_modules/@types für die Auflösung für Definitionen zu suchen. Zum Beispiel from "chai" Ergebnisse in TS Suche node_modules/@types/chai/index.d.ts für die Definition. So weiß TS, was Sie aus diesem Modul importieren können und wie diese aussehen.

Sie können mehr über module resolution in the docs lesen.

Wie die .d.ts Datei geschrieben wird schwer zu folgen (vor allem, weil die meist veröffentlichten Bibliotheken support several module system flavors gleichzeitig), aber in kurzem chai exports ein interface ChaiStatic that describes the shape of the module, die ein Mitglied ExpectStaticexpect des Typs enthält. So weiß TS, was import { expect } from "chai" ist.

Auch erwähnenswert ist, dass es scheint, Chais aktuelle Definitionen scheinen nicht ganz zu folgen latest way to define a UMD module. Dies macht sie jedoch in keiner Weise inkompatibel.

Verwandte Themen