TypeScript:根据参数运行时值推导函数返回类型问题
解决TypeScript env函数返回类型推导问题
你当前的函数返回类型仅判断了fallback参数的类型,未将required参数的布尔值纳入类型判断逻辑,导致传入required: true时无法正确推导返回string类型。
修改后的函数实现
function env< RequiredType extends boolean | undefined = undefined, FallbackType extends string | undefined = undefined, >( name: string, required?: RequiredType, fallback?: FallbackType, ): FallbackType extends string ? string : RequiredType extends true ? string : string | undefined { // 函数逻辑示例: const value = process.env[name]; if (value) return value; if (fallback !== undefined) return fallback; if (required) { console.error(`环境变量 ${name} 未定义且未提供回退值`); process.exit(1); } return undefined; }
类型推导验证
修改后各调用场景的类型会正确推导:
const a = env("name") // string | undefined ✅ const b = env("name", false) // string | undefined ✅ const c = env("name", true) // string ✅ const d = env("name", false, "This is my name") // string ✅ const e = env("name", true, "This is my name") // string ✅
关键改动说明
- 约束泛型
RequiredType为boolean | undefined、FallbackType为string | undefined,让TypeScript更精准推导参数类型 - 返回类型采用联合条件判断:
- 优先判断
fallback是否为string,是则返回string - 否则判断
required是否为true,是则返回string - 其余情况返回
string | undefined
- 优先判断
这样就同时覆盖了fallback存在和required: true两种必然返回字符串的场景。
内容的提问来源于stack exchange,提问作者Laurenz1606
相关产品推荐
相关产品推荐

