TypeScript开发中如何避免类型重复定义的问题?
你可以用TypeScript提供的typeof类型操作符直接提取已有变量的类型,完全不需要额外重复定义interface。
基础用法
直接基于你已经定义的options变量提取类型,后续所有需要用到该类型的地方直接复用即可:
// 仅定义一次options,TS自动完成类型推断 const options = { foo: 'bar', foo1: 'bar1', foo2: 'bar2', // 更多属性 } // 直接提取options的类型生成别名,不需要手动写任何属性定义 type OptionsType = typeof options const someFn1 = (options: OptionsType) => { console.log(options.foo) } const someFn2 = (options: OptionsType) => { console.log(options.foo1) }
后续如果修改options的结构,OptionsType会自动同步更新,不需要手动维护类型定义,完全避免重复编码。
精确字面量类型适配
如果你需要提取的是精确的字面量类型(比如要求foo的类型是固定值'bar'而非宽泛的string),可以搭配as const断言使用:
const options = { foo: 'bar', foo1: 'bar1' } as const // 此时OptionsType的foo类型为字面量'bar',foo1类型为字面量'bar1' type OptionsType = typeof options
适用场景区分
- 如果你的类型是优先定义的标准规范,需要多个不同的变量/参数符合该规范,优先使用interface/type手动定义类型
- 如果已经存在一个基准变量,仅需要复用它的类型,直接用
typeof提取是最优解,属于TypeScript官方支持的标准用法
内容的提问来源于stack exchange,提问作者Calvintwr
相关产品推荐
相关产品推荐

