首页 > 解决方案 > 类型转换后的 TypeScript“不是构造函数类型”错误

问题描述

我有以下打字稿代码:

class ClassA {
  field1: any;
}

const SomeClassAsA = diContainer.get('SomeClass') as ClassA;

class ClassB extends ClassA {} // works
class ClassB extends SomeClassAsA {} // error: Type ClassA is not a constructor function type

为什么 ClassB 可以用 ClassA 扩展,但不能用其他一些转换为 ClassA 的对象?需要扩展 SomeClass。我怎样才能做到这一点?

我使用 TypeScript 1.5.3

标签: typescript

解决方案


const SomeClassAsA = diContainer.get('SomeClass') as typeof ClassA;
//                                                   ^ added

当您使用类作为类型时,您实际上是在键入该类的一个实例。请记住,类是 javascript 中的真实对象,而不是interface没有原始 javascript 推论的类。

这是有道理的,因为它允许您编写:

const person: Person = new Person()

person显然是一个实例,Person而不是类构造函数对象Person

因此,要获取类本身的类型,请使用typeof运算符。

工作游乐场


推荐阅读