gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 20:57:12 25 4
gpt4 key购买 nike

我想创建一个名为 createInstance 的函数,该函数接收实例 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 Playground 上尝试过了,它有效,我为 c instanceof B 得到了 true 。但它在 new t("c") 行中显示一条警告:“此表达式不可构造。类型‘Function’没有构造签名。”

正确的做法是什么?谢谢

最佳答案

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

关于javascript - TypeScript - 使用构造函数属性创建实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61444428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com