zu exportieren, wenn ich eine Datei myinterface.tsdefinieren Schnittstellen ohne sie
interface MyInterface {
foo() : string
}
und eine zweite Datei myimplementation.ts
class MyImplementation implements MyInterface {
...
}
Frage 1 haben: Warum funktioniert das? Ich exportiere die Schnittstelle nicht.
Dann, wenn ich foo() : string
-foo() : SomeType
ändern möchten, wo SomeType
in einem anderen Modul definiert ist, muss ich myinterface.ts ändern sein:
import { SomeType } form 'some-module';
interface MyInterface {
foo() : SomeType
}
Dies verursacht Fehler in myimplementation.ts sagen „nicht finden können, Name 'MyInterface' ".
Frage 2: Was die Art und Weise ändert, um eine * .ts-Datei geändert wird, wenn Sie einen Import (oder einen Export) im Vergleich zu addieren, wenn die Datei-Schnittstellen nur enthält (und sie sind nicht sogar als Export markiert).
Ich verstehe, dass die beste Praxis wäre, einfach meine Schnittstelle als Export zu markieren und zu tun import {MyInterface} from 'myinterface';
, aber ich versuche zu verstehen, warum die ursprüngliche Version funktioniert, und was die Auswirkungen sind.
TS-Schnittstellen sind nicht real in dem Sinne, dass sie ausführbaren Code erzeugen, sie fungieren als Verträge für das Typsystem und werden vor der Ausgabe verworfen. Sie sind sehr ähnlich wie'Enum' in diesem Sinne. Sie können sie nicht importieren oder exportieren, da sie nicht existieren. – ssube
Ich verstehe das, aber es scheint zu gelten, 'importierenSomeInterface} von 'some-modul';', also stelle ich mir vor es ist eine Art Hinweis auf TSC. Ich bin eigentlich neugierig auf die Verwendung von Schnittstellen in einer anderen Datei definiert. – Kir
@ssube das ist nicht ganz richtig. Wenn ich die Schnittstelle zu 'SomeUndefinedInterface' ändere, wird ein Compilerfehler ausgelöst. Die Schnittstelle muss irgendwo definiert sein, und ich stimme @Kir zu, dass es mystisch ist, dass sie die Definition in der anderen Datei ohne einen expliziten Import kennt: "Umgekehrt, um eine Variable, Funktion, Klasse, Schnittstelle, usw. zu exportieren anderen Modulen muss es mit einem der Importformulare importiert werden. Module sind deklarativ, die Beziehungen zwischen den Modulen werden auf Dateiebene hinsichtlich des Imports und Exports angegeben. " Typescript-Handbuch – Orphid