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文件一起使用。我不相信他们的意图是把这两者混为一谈。