如何在符合ESLint规则下定义含函数的TypeScript对象类型?
合规的类型定义方案
你可以通过明确定义函数类型来替代any和Function,既满足ESLint规则,又能保留完整的类型校验:
方案1:自定义函数类型+索引签名
先声明一个专用于该场景的函数类型,再用它作为索引签名的值类型:
// 定义接收string参数、返回string的函数类型 type StringProcessor = (v: string) => string; const someDefinitions: { [key: string]: StringProcessor } = { A: (v: string): string => 'Returning A', B: (v: string): string => 'Returning B with ' + v, C: (v: string): string => 'Returning C', };
方案2:使用Record工具类型(更简洁)
TypeScript内置的Record工具类型可以直接生成键值对结构的类型,写法更紧凑:
const someDefinitions: Record<string, (v: string) => string> = { A: (v: string): string => 'Returning A', B: (v: string): string => 'Returning B with ' + v, C: (v: string): string => 'Returning C', };
为什么这样合规?
- 替代
any:明确的函数类型保留了参数和返回值的类型校验,避免类型丢失 - 替代
Function:Function是宽泛的顶层类型,无法约束参数和返回值,而明确的(v: string) => string类型能确保所有属性值都符合预期的函数签名,完美适配你的动态调用场景
内容的提问来源于stack exchange,提问作者Selvakumar Arumugam
相关产品推荐
相关产品推荐

