如何利用TypeScript的infer类型推断让函数返回特定值?
用TypeScript的infer优化函数返回类型
首先修正你代码里的两处语法错误:
- 接口定义不能用
=,正确写法是interface IConfig { ... } - 原函数
one的返回类型写错了,IConfig['isDebugMode']是函数类型(() => 'prod' | 'development'),不是函数的返回值类型,这会导致类型不匹配报错。
接下来用infer提取目标函数的返回值类型,实现让one返回特定的联合类型:
// 修正后的接口定义 interface IConfig { isDebugMode: () => 'prod' | 'development'; } // 用infer提取函数返回值类型的工具类型 type ExtractReturnType<T> = T extends () => infer R ? R : never; // 定义函数,指定返回类型为isDebugMode的返回值类型 function one(): ExtractReturnType<IConfig['isDebugMode']> { // 由于process.env.mode默认是string类型,需要断言为目标类型 return process.env.mode as ExtractReturnType<IConfig['isDebugMode']>; }
说明
ExtractReturnType通过条件类型和infer自动提取传入函数类型的返回值:如果T是无参数函数,就推断它的返回值为R,否则返回never。- 这样
one函数的返回类型就被约束为'prod' | 'development',符合你想要的特定值类型要求。 - 对
process.env.mode做类型断言是因为Node.js的process.env默认所有属性都是string | undefined,需要明确它的类型匹配目标返回值。
内容的提问来源于stack exchange,提问作者codeBox
相关产品推荐
相关产品推荐

