TypeScript-使用构造函数属性创建实例

问题描述 投票:0回答:1

我想创建一个名为createInstance的函数,该函数接收实例a并创建与c类型相同的新实例a。请注意,在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)

我已经在打字稿游戏场中尝试过了,并且可以正常工作,我得到truec instanceof B。但是它在new t("c")行中显示警告,内容为:“此表达式不可构造。类型'Function'没有构造签名。”

正确的方法是什么?谢谢

javascript typescript constructor instance instanceof
1个回答
1
投票

这实际上仍然是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 Link

© www.soinside.com 2019 - 2024. All rights reserved.