You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在对象中初始化带调用签名与属性的函数类型成员?

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:52:04