TypeScript -使用constructor属性创建示例

yv5phkfx  于 2022-12-05  发布在  TypeScript
关注(0)|答案(2)|浏览(150)

我想创建一个名为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 Btrue。但是它在new t("c")行中显示了一个警告,内容是:此表达式不可构造.类型“Function”没有构造签名.
正确的方法是什么?谢谢

92dk7w1h

92dk7w1h1#

这实际上仍然是TypeScript中缺少的一个特性,因为T.constructor不是T类型,而只是一个普通函数。

const t = a.constructor as { new(ref: string): A };

编辑:您可以使用ConstructorParameters将构造函数类型化(参数列表):

const t = a.constructor as { new(...args: ConstructorParameters<typeof A>): A };

请参阅TS存储库#4536和此similar question的相关问题
Playground链接

de90aj5v

de90aj5v2#

这是可行的:

const t = a.constructor as typeof A;

相关问题