web-dev-qa-db-fra.com

TypeScript TS2322: Le type 'typeof Foo' n'est pas assignable au type 'IFoo'

J'essaie de composer certaines classes en utilisant la syntaxe du module ES2015 avec TypeScript. Chaque classe implémente une interface dans un .d.ts fichier.

Voici un MWE du problème.

Dans un .d.ts fichier que j'ai:

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

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

Mon export c'est:

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

Et mon importation est:

import Foo from "./foo";

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

L'erreur ici est:

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

Des idées ici?

13
azz

Quand tu dis foo: IFoo = Foo; vous affectez la classeFoo à IFoo. Cependant l'interface IFoo est implémentée par instances de cette classe. Tu as besoin de faire :

foo: IFoo = new Foo;
18
basarat