2015-11-05 4 views
8

Ich versuche, einige Klassen mit ES2015-Modul-Syntax mit TypeScript zu komponieren. Jede Klasse implementiert eine Schnittstelle in einer Datei .d.ts.TypeScript TS2322: Typ 'typeof Foo' ist nicht dem Typ 'IFoo' zuweisbar

Hier ist ein MWE des Problems.

In einer .d.ts Datei ich habe:

interface IBar { 
    foo: IFoo; 
    // ... 
} 

interface IFoo { 
    someFunction(): void; 
    // ... 
} 

Mein Export ist:

// file: foo.ts 
export default class Foo implements IFoo { 
    someFunction(): void {} 
    // ... 
} 
// no errors yet. 

Und mein Import ist:

import Foo from "./foo"; 

export class Bar implements IBar { 
    foo: IFoo = Foo; 
} 

Der Fehler ist hier:

error TS2322: Type 'typeof Foo' is not assignable to type 'IFoo'. 
Property 'someFunction' is missing in type 'typeof Foo'. 

Irgendwelche Ideen hier?

Antwort

11

Wenn Sie foo: IFoo = Foo; sagen Sie die Zuordnung der KlasseFoo zu IFoo. Die Schnittstelle IFoo wird jedoch von Instanzen dieser Klasse implementiert. Sie müssen:

foo: IFoo = new Foo; 
+2

Rookie Fehler, dachte ich habe etwas mit TypeScript falsch gemacht, wenn es ein Problem mit dem tatsächlichen JS war ... Danke. – azz

+0

Prost. Bitte als beantwortet markieren – basarat

+0

Natürlich. SO lässt Sie 10 Minuten warten, bevor Sie akzeptieren. – azz

Verwandte Themen