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
相关产品推荐
相关产品推荐

