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)
};

Súvisiace články