2015-11-05 2 views
8

Я пытаюсь составить некоторые классы с использованием синтаксиса модуля ES2015 с помощью TypeScript. Каждый класс реализует интерфейс в файле .d.ts.TypeScript TS2322: Тип 'typeof Foo' не может быть присвоен типу 'IFoo'

Вот проблема MWE.

В .d.ts файле у меня есть:

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

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

Мой экспорт:

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

И мой импорт:

import Foo from "./foo"; 

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

Ошибка здесь:

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

Любые идеи здесь?

ответ

11

Когда вы говорите foo: IFoo = Foo; вы присвоив классFoo к IFoo. Однако интерфейс IFoo реализован экземплярами этого класса. Вам необходимо:

foo: IFoo = new Foo; 
+2

Ошибка новичков, думал, что я делал что-то неправильно с TypeScript, когда это было проблемой с фактическим JS ... Спасибо. – azz

+0

Cheers. Пожалуйста, отметьте как ответ – basarat

+0

Конечно. SO заставляет вас ждать 10 минут до принятия. – azz

Смежные вопросы