我想创建一个名为createInstance
的函数,它接收一个示例a
,并创建一个与a
类型相同的新示例c
。注意,在createInstance
中,我不知道a
的类型是什么,我只知道它继承自某个类A
,但我希望c
的类型是B
,这是a
的真实的类型,这是我目前得到的结果:
class A {
constructor(public ref: string) {}
}
class B extends A {
}
const createInstance = (a: A): void => {
const t = a.constructor
const c = new t("c")
console.log(c)
console.log(c instanceof B)
}
const b = new B("b")
createInstance(b)
我已经在 typescript 游戏中试过了,它很有效,我得到了c instanceof B
的true
。但是它在new t("c")
行中显示了一个警告,内容是:此表达式不可构造.类型“Function”没有构造签名.
正确的方法是什么?谢谢
2条答案
按热度按时间92dk7w1h1#
这实际上仍然是TypeScript中缺少的一个特性,因为
T.constructor
不是T类型,而只是一个普通函数。编辑:您可以使用
ConstructorParameters
将构造函数类型化(参数列表):请参阅TS存储库#4536和此similar question的相关问题
Playground链接
de90aj5v2#
这是可行的: