import - Hvordan kan jeg eksportere et grensesnitt som jeg har importert?
Jeg lager et bibliotek i TypeScript, som er spredt over flere filer. Jeg tar alle klassene og konstantene jeg har definert og importerer dem til ett modul, som eksporterer dem alle under ett navnrom. Jeg har nettopp definert et grensesnitt, og jeg ønsker å inkludere det i det samme navnrommet/modulen som alle de andre delene av biblioteket mitt. Men tydeligvis kan jeg ikke.
Her er et forenklet eksempel:
/app.ts er inngangspunktet for applikasjonen, alt jeg gjør i den for øyeblikket er å inkludere biblioteket mitt MyLib:
//app.ts
import myLib = require("lib/MyLib/MyLib"); // this works fine
/lib/MyLib/MyLib.ts er filen der jeg importerer alle tingene definert av MyLib, og eksporterer dem sammen:
// lib/MyLib/MyLib.ts
import VehiclesImport = require("./transport/vehicles");
// error under VehiclesImport.IAutomobile, saying that VehiclesImport has no property IAutomobile
export var IAutomobile = VehiclesImport.IAutomobile;
export var Car = VehiclesImport.Car;
I /lib/MyLib/transport/vehicles.ts definerer jeg flere klasser og grensesnitt for kjøretøy, her vil jeg bare vise IAutomobile og Car:
// lib/MyLib/transport/vehicles.ts
export interface IAutomobile {
weight: number
}
export class Car implements IAutomobile {
weight = 3000
}
Jeg har prøvd å lage en klasse truck i MyLib.ts, som riktig implementerer IAutomobile, og det fungerer fint, uten noen feilmeldinger. Problemet ser bare ut til å oppstå når jeg vil få tilgang til IAutomobile utenfor en 'implements'-setning.
Jeg beklager hvis dette virker som en 'kode-dump', men etter min mening er dette et alvorlig problem at jeg ikke kan få tilgang til grensesnittene mine utenom i en klassedeklarasjon. Jeg har søkt på Google de siste to timene og funnet ingenting om emnet. Takk for all hjelp du kan gi meg!
Rediger: Jeg forstår at TypeScript-grensesnitt ikke er en del av den kompilert JavaScript-koden, men det bør ikke hindre meg i å manipulere dem innenfor TypeScript.
Svar #1
Bruk import-nøkkelordet for å hente inn noe i type-deklarasjonsområdet (i motsetning til var som henter det inn i variabel-deklarasjonsområdet).
Dette demonstreres nedenfor. a.ts:
export interface A {
val: number;
}
For å re-eksportere dette fra en annen fil b.ts:
import a = require('./a');
export import B = a.A; // Important use of import
Eksempel på bruk i en annen fil c.ts:
import b = require('./b');
var foo: b.B;
foo.val = 123;
interface C extends b.B {
val2:number;
}
var bar: C;
bar.val2 = 456;
Svar #2
Eksemplet omskrevet i henhold til TS-språkspesifikasjonen:
a.ts:
export interface A {
val: number;
}
For å re-eksportere dette fra en annen fil b.ts:
export {A} from './a'
Bruk i en annen fil c.ts:
import {A} from './b'
var foo: A = {val: 2};
foo.val = 123;
interface C extends A {
val2:number;
}
var bar: C = {val: 1, val2: 3};
bar.val2 = 456;
