如何在对象中初始化带调用签名与属性的函数类型成员?
解决TypeScript中带属性的函数作为对象属性的实现问题
针对你遇到的场景,有几种可行的实现方式:
方法一:先构建符合类型的函数,再组装对象
先按照你之前的方式创建出满足MyDescribedFunction类型的函数实例,再将其赋值给对象的fun属性:
type MyDescribedFunction = { description: string () => boolean } type MyObjType = { name: string fun: MyDescribedFunction } // 先创建符合类型的函数 const functionImpl: MyDescribedFunction = () => true; functionImpl.description = "Bar"; // 再组装对象 const myObjInstance: MyObjType = { name: "Foo", fun: functionImpl };
方法二:使用类型断言临时跳过初始检查
如果想在对象初始化时直接赋值函数,可通过类型断言告诉编译器该函数后续会补全属性,之后再添加description:
const myObjInstance: MyObjType = { name: "Foo", fun: (() => true) as MyDescribedFunction }; myObjInstance.fun.description = "Bar";
注意:类型断言会跳过TypeScript的类型检查,要确保后续确实会添加description属性,避免运行时错误。
方法三:用Object.assign直接创建带属性的函数
利用Object.assign将函数和属性合并,一次性创建出符合类型的函数实例:
const myObjInstance: MyObjType = { name: "Foo", fun: Object.assign(() => true, { description: "Bar" }) as MyDescribedFunction };
这种方式可以一步完成函数的创建和属性赋值,同时满足类型要求。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

