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

TypeScript中如何定义带静态属性的对象方法类型

TypeScript 为挂载静态属性的对象方法声明类型

你可以通过调用签名合并的方式实现类型声明,核心是把「函数本身的调用类型」和「函数上挂载的静态属性类型」组合到一起,两种常用实现方案如下:


方案1:抽离带静态属性的函数类型(推荐)

单独定义方法的复合类型,复用性和可读性更好:

// 定义携带静态属性的函数类型:既是可调用的函数,又包含三个固定静态属性
type AppFunc = {
  // 这部分是函数本身的入参、返回值类型,和你定义的func() {}实际签名匹配即可
  (): void;
  // 下面是挂载的静态属性类型
  prop1: number;
  prop2: string;
  prop3: () => void;
};

// 初始化对象时,对初始空方法做类型断言,规避TS默认推导类型缺少静态属性的报错
const obj = {
  func: (() => {}) as AppFunc
};

// 后续给方法挂载静态属性时,TS会自动做类型校验,属性名写错、类型不匹配都会直接报错
obj.func.prop1 = 1000;
obj.func.prop2 = 'some string';
obj.func.prop3 = () => {};

方案2:直接声明对象整体类型

如果不需要复用方法类型,可以直接在对象上声明结构:

const obj: {
  func: {
    (): void;
    prop1: number;
    prop2: string;
    prop3: () => void;
  }
} = {
  // 初始化时临时断言跳过初始类型检查即可,后续赋值会有完整类型提示
  func: (() => {}) as any
};

obj.func.prop1 = 1000;
obj.func.prop2 = 'some string';
obj.func.prop3 = () => {};

注意:不要试图在对象字面量里直接给方法写静态属性,JS/TS的对象字面量语法不支持直接给内部属性声明调用签名,初始化空函数+类型断言是成本最低、类型安全性最高的实现方式。


内容的提问来源于stack exchange,提问作者JayceLin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:51:06