Typescript: Deklarieren Sie die Variable als Typ des externen Moduls ohne Import

Erstellt am 8. Sept. 2015  ·  3Kommentare  ·  Quelle: microsoft/TypeScript

Sie da,

Ist es möglich, ein externes (commonjs) Modul "A" zu schreiben und dann im Code eines anderen Moduls "B" eine Variable als Typ des Moduls "A" zu deklarieren, ohne den Import zu verwenden, was letztendlich das Modul "A" erfordert.

Der Grund, warum ich dies tun möchte, ist, dass ich einen Verweis auf Modul "A" an den Konstruktor einer Klasse in einem anderen Modul "B" übergeben werde, weil ich möchte, dass Modul "A" ein Singleton ist. Aber ich möchte das Argument im Konstruktor zu dem des Moduls "A" eingeben, als ob das Modul "A" mit import A = require ("A") importiert worden wäre;

Der Grund, warum ich ein Singleton-Modul möchte, ist, dass dieses Modul möglicherweise Instanzen von Klassen enthält, die Datenbankverbindungen usw. verwalten, und ich möchte nicht, dass sie bei jedem Import neu initialisiert werden. Ich möchte in der Lage sein, sie weiterzugeben, anstatt mich auf potenzielle "Knoten-Modul-Cache" -Magie zu verlassen.

Gibt es eine Möglichkeit, dies zu tun? Ich habe mir andere Wege überlegt, wie ich erreichen kann, was ich will, aber das fühlt sich am einfachsten an, wenn es möglich ist.

Question

Hilfreichster Kommentar

Modulimporte werden eliminiert, wenn sie nicht an einer Wertposition verwendet werden. Wenn Ihr Import des Moduls A nur an einer Typposition verwendet wird, wird der Aufruf von require nicht ausgeschrieben.

beispielsweise:

// B.ts
import s = require("./A");
var x: typeof s;

emittiert

var x;

Beantwortet das deine Frage?

Alle 3 Kommentare

Modulimporte werden eliminiert, wenn sie nicht an einer Wertposition verwendet werden. Wenn Ihr Import des Moduls A nur an einer Typposition verwendet wird, wird der Aufruf von require nicht ausgeschrieben.

beispielsweise:

// B.ts
import s = require("./A");
var x: typeof s;

emittiert

var x;

Beantwortet das deine Frage?

Oh, das ist toll! Es beantwortet definitiv meine Frage. Ich konnte dies nicht in der Dokumentation finden, also danke eine Tonne für Ihre Hilfe. :) :)

Hallo Leute,
Ich habe eine Frage, die in die gleiche Richtung geht. Ich habe die obige Lösung ausprobiert, aber sie hat jetzt bei mir funktioniert.
Ich importiere Klassen aus einem Webpack-Modul. Elternimport {A, B} von "Eltern";
Ich möchte einfach den Konstruktor für diese Klassen aufrufen. Ich habe versucht, const a = A ({data: 1}); Dies gibt beim Kompilieren keinen TS-Fehler aus. Aber es bricht bei Laufzeit-Javascript ab und sagt: Typfehler A ist kein Konstruktor.

Muss ich benutzerdefinierte Typen erstellen und in devDependancies hinzufügen? Oder gibt es eine bestimmte Möglichkeit, mein "übergeordnetes" Modul wie die Standardeinstellung zu exportieren?

Jede Hilfe wird geschätzt.

Prost,
Sudeep

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

blendsdk picture blendsdk  ·  3Kommentare

Antony-Jones picture Antony-Jones  ·  3Kommentare

dlaberge picture dlaberge  ·  3Kommentare

rigdern picture rigdern  ·  3Kommentare

siddjain picture siddjain  ·  3Kommentare