如何根据参数值指定TypeScript函数的返回值类型?
可以实现,无需放宽到任意number类型
你可以通过泛型捕获parameter1的具体字面量类型,从而把它纳入返回函数的类型中,不需要将返回类型放宽为number。
正确实现代码
// 用泛型P捕获parameter1的具体字面量类型 function myFunctionBuilder<P extends number>(parameter1: P, /* 其他无关参数 */) { return function <Targument>(argument: Targument): [-1 | 0 | 1 | P, Targument] { // 示例逻辑:根据条件返回对应值 if (/* 你的特定条件 */) { return [parameter1, argument] as const; } else { // 返回默认的-1/0/1之一 return [0, argument] as const; } }; }
效果说明
- 当你传入字面量值时,类型会精确保留:
// 返回的函数类型为 (argument: T) => [-1 | 0 | 1 | 5, T] const myFn = myFunctionBuilder(5); const result = myFn("test"); // result类型为 [-1 | 0 | 1 | 5, string] - 如果传入的是动态number变量(非字面量/const),泛型会被推断为
number,此时类型等价于[number, Targument],这是TypeScript的正常行为,因为无法确定变量的具体值。
为什么原写法不行
你之前的写法直接用parameter1作为类型成员,这是不合法的——类型层面无法直接引用运行时的参数值,必须通过泛型在编译时捕获参数的具体字面量类型,才能把它纳入返回类型中。
内容的提问来源于stack exchange,提问作者Rax Adaam
相关产品推荐
相关产品推荐

