TS非抽象类被解释为抽象

时间:2017-03-22 17:27:05

标签: typescript abstract-class abstract

我试图实例化一个非抽象类C,它继承自抽象类B(它本身派生自抽象类A),但是Typescript是坚持C无法实例化,因为它是抽象的。所有这三个类都使用以下d.ts文件在ES2015中编写:

A.d.ts

declare abstract class A {
  constructor(opts?: { opt: boolean});

  /* Abstract and concrete methods */
}

B.d.ts

declare abstract class B extends A {
  abstract a(): void;
  abstract b(foo: string): Promise<Bar[]>;
  abstract c(foo: string): Promise<Bar>;
  abstract d(foo: string, v: any): Promise<any>;
  abstract e(foo: string): Promise<any>;

  f(foo: string, bar: number, baz: string): string;
}

C.d.ts

declare class C extends B {
  constructor(opts?: { opt: boolean });

  a(): void;
  b(foo: string): Promise<Bar[]>;
  c(foo: string): Promise<Bar>;
  d(foo: string, v: any): Promise<any>;
  e(foo: string): Promise<any>;

  f(foo: string, bar: number, baz: string): string;
}

在另一个项目中,我导入C并致电new C({ opt: true }),并收到错误消息Cannot create an instance of the abstract class 'C'.我发现我的申报文件存在问题,但我可以& #39;在SO或typescriptlang.org上找到任何表明它是什么的东西。我做错了什么?

1 个答案:

答案 0 :(得分:0)

结果是声明文件中的拼写错误:在B.d.ts中,我有export as namespace BTypo;而不是export as namespace B;,而C则必须混淆Typescript如何{{1}实现了AB的抽象方法。