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 ExpectStatic
expect
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.