Ich möchte in meinem typoskriptbasierten Projekt mehrere Schnittstellen in einer eigenen Datei definieren, aus denen ich Klassen für die Produktion sowie Mocks zum Testen implementieren werde. Ich kann jedoch nicht herausfinden, wie die richtige Syntax lautet. Ich habe viele Tutorials zum Deklarieren und Implementieren von Schnittstellen gefunden, aber alle haben eine triviale Implementierung sowohl der Schnittstelle als auch der abgeleiteten Klassen in derselben Datei, was nicht sehr real ist. Was ist der richtige Weg, um die Schnittstellen zu exportieren und zu importieren?
quelle
Verwenden Sie definition (
d.ts
) - Dateien und Namespaces. Auf diese Weise müssen keine Module importiert / exportiert werden. Das DefinitelyTyped-Projekt enthält Anleitungen und eine Vielzahl von Beispielen .quelle
module.ts
undmodule.d.ts
im selben Ordner, wird der Compiler die skip -module.d.ts
Datei, so dass Ihre Erklärungen werden nicht berücksichtigt. Benennen Sie died.ts
Datei um oder verschieben Sie sie in einen anderen Ordner. Dieser Ansatz ist hilfreich, wenn Sie ein geeignetes Modul haben , aber wenn Sie Typen zwischen Modulen teilen möchten , sollten Sie ihn besser verwendenimport .. from ..
.d.ts
habe meinem Reaktionsprojekt hinzugefügt , muss aber noch die Schnittstellen importieren.Exportieren Sie nur wenige Schnittstellen
Ohne mehrere Exporte zu verteilen , können Sie sie in einem einzigen
export {}
Block gruppieren (in diesem Fall sollte kein Dateitypdefault
deklariert werden):// interfaces.ts interface IWords { [key: string]: string; } interface INumbers { [key: string]: number; } interface IBooleans { [key: string]: boolean; } interface IValues { [key: string]: string | number; } interface IStructures { [key: string]: INumbers | IBooleans | IValues; } export { // not exporting IWords | INumbers IBooleans, IValues, IStructures, }
Beispiel importieren
import { IBooleans, IValues, IStructures } from 'interfaces'; const flags: IBooleans = { read: true, write: false, delete: false }; const userFile: IValues = { user: 1, username: 'One', file: 'types.txt' }; const userContext: IStructure = { file: userFile, permissions: flags, counts: { views: 3, writes: 1 } // => INumbers (lint: try to remove IValues from IStructures) };
quelle
Sie müssen die Schnittstellen in die Datei exportieren, in der sie definiert sind, und sie in die Dateien importieren, in denen sie verwendet werden. Beispiele finden Sie unter diesem Link.
x.ts.
interface X{ ... } export default X
y.ts
import X from "./x.ts" // You can use X now
Weitere Informationen finden Sie unter https://www.typescriptlang.org/docs/handbook/modules.html
quelle