Website-Suche

typescript - Gibt es eine bedeutende Bedeutung für `.d.ts`-Dateinamen außer der Lesbarkeit?


In meinem Projekt gibt es eine shims-vue.d.ts Datei im src Ordner:

declare module '*.vue' {
  import type { DefineComponent } from 'vue'
  const component: DefineComponent<{}, {}, any>
  export default component
}

Selbst wenn ich shims-vue.d.ts in foo.d.ts umbenenne, bleiben die Deklarationen wirksam. Daher frage ich mich, ob .d.ts-Dateinamen außer der Lesbarkeit noch eine besondere Bedeutung haben.

Egal, wie ich es umbenannt habe, funktionieren seine Deklarationen weiterhin, ohne dass die umbenannte .d.ts-Datei manuell importiert werden muss.

Antwort #1

Die Deklarationsdatei stellt Typdefinitionen für eine andere JavaScript-Datei (Modul) dar. Der deklarierte Modulname muss mit dem Namen der physischen JavaScript-Datei übereinstimmen, die importiert wird.

Zum Beispiel, damit Folgendes korrekt funktioniert, sowohl für Typisierungen als auch für den Laufzeitimport:

import { $ } from "jquery";

Der von Ihnen angegebene Modulname muss "jquery" heißen, da Ihre JavaScript-Datei jquery.js ist:

declare module "jquery" {
    /...
}

Es ist nicht wichtig, wie Sie die Deklarationsdatei jquery.d.ts oder my-declaration.d.ts usw. benannt haben, solange der deklarierte Modulname korrekt ist und der tatsächlichen JavaScript-Datei entspricht.

Moduldeklarationen unterstützen auch Platzhalter im Namen, sodass in Ihrem Fall *.vue die Standard-„Form“ jeder *.vue-Datei (main.vue, page1.vue usw.) darstellt.

Antwort #2

Ja, die Benennung von d.ts-Dateien ist für die Modulauflösung relevant. Beim Auflösen von import Foo from 'module' sucht tsc zuerst nach module.ts und dann nach module.d.ts. Höchstwahrscheinlich findet tsc in Ihrem Fall die Deklarationen immer noch mithilfe anderer Strategien, wie einer types- oder baseUrl-Konfiguration.

Wenn Sie besser verstehen möchten, wie dies funktioniert, kann dieser Befehl hilfreich sein

tsc --traceResolution | grep -B 20 "shims-vue.d.ts"

Das ist völlig in Ordnung, aber zum Beispiel ist dieses Problem ein gutes Beispiel dafür, wie die Benennung von .d.ts-Dateien tatsächlich wichtig ist.

Siehe die Dokumentation zur Modulauflösung für eine detailliertere Erklärung.

Verwandte Artikel