typescript1.8 - Ako deklarovať a importovať rozhrania TypeScriptu v samostatnom súbore
Chcem definovať niekoľko rozhraní v ich vlastných súboroch v mojom projekte TypeScript, z ktorých budem implementovať triedy pre produkciu aj mocky na testovanie.
Avšak nemôžem prísť na správnu syntax. Našiel som mnoho návodov na deklarovanie rozhraní a ich implementáciu, ale všetky majú triviálnu implementáciu rozhrania aj odvodených tried v rovnakom súbore, čo nie je veľmi realistické.
Aký je správny spôsob exportovania a importovania rozhraní?
Odpoveď č. 1
Musíte exportovať rozhranie zo súboru, v ktorom je definované, a importovať ho všade, kde ho chcete používať.
v IfcSampleInterface.ts:
export interface IfcSampleInterface {
key: string;
value: string;
}
V SampleInterface.ts
import { IfcSampleInterface } from './IfcSampleInterface';
let sampleVar: IfcSampleInterface;
Odpoveď č. 2
Používajte súbory s definíciami (d.ts) a menné priestory, nie je potrebné importovať/exportovať moduly týmto spôsobom. Projekt DefinitelyTyped má pokyny a obrovské množstvo príkladov, ako to robiť.
Odpoveď č. 3
Exportovať len niekoľko rozhraní
Bez rozširovania viacerých exportov ich môžete zgrupovať do jedného bloku export {} (v tomto prípade by sa nemal deklarovať žiadny typ súboru default):
// 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,
}
Príklad importu
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)
};
