Typescript TS非抽象类被解释为抽象类
我试图实例化一个非抽象类Typescript TS非抽象类被解释为抽象类,typescript,abstract-class,abstract,Typescript,Abstract Class,Abstract,我试图实例化一个非抽象类C,该类继承自抽象类B(它本身派生自抽象类a),但Typescript坚持认为C不能实例化,因为它是抽象的。所有三个类都在ES2015中编写,包含以下d.ts文件: 在A.d.ts declare abstract class A { constructor(opts?: { opt: boolean}); /* Abstract and concrete methods */ } declare abstract class B extends A {
C
,该类继承自抽象类B
(它本身派生自抽象类a
),但Typescript坚持认为C
不能实例化,因为它是抽象的。所有三个类都在ES2015中编写,包含以下d.ts
文件:
在A.d.ts
declare abstract class A {
constructor(opts?: { opt: boolean});
/* Abstract and concrete methods */
}
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;
}
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;
}
在B.d.ts
declare abstract class A {
constructor(opts?: { opt: boolean});
/* Abstract and concrete methods */
}
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;
}
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
并调用newc({opt:true})
,然后得到错误消息无法创建抽象类“C”的实例。
我认为我的声明文件有问题,但我找不到任何关于SO或指示它是什么的东西。我做错了什么?这是声明文件中的一个输入错误:在B.d.ts
中,我将导出为名称空间BTypo代码>而不是导出为命名空间B
,这反过来肯定会混淆Typescript,使其无法理解C
是如何实现A
和B
的抽象方法的。您不能创建一个在定义中声明的类。您必须在非定义文件中有一个实际类才能创建它的实例。它们是C类的具体实现吗?@Mikemcaughan,所以您是说,从typescript的角度看,这些类的ES2015版本不“计数”?我以为这就是声明文件的用途?@Martin是的,但是在.js文件而不是.ts文件中。我编写声明文件是为了在Typescript项目中使用C类Typescript是它自己的语言,可以选择传输到ES2015。如果要使用TypeScript,请将TypeScript与.ts文件一起使用。如果要使用ES2015,请将ES2015与.js文件一起使用。我不相信他们的意图是把这两者混为一谈。