我试图实例化一个非抽象类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上找到任何表明它是什么的东西。我做错了什么?
答案 0 :(得分:0)
结果是声明文件中的拼写错误:在B.d.ts
中,我有export as namespace BTypo;
而不是export as namespace B;
,而C
则必须混淆Typescript如何{{1}实现了A
和B
的抽象方法。