如何用工具类型将函数返回值指定为数组元素的联合类型
如何让函数返回值类型为输入数组元素的联合类型
要实现你需要的效果,核心是利用TypeScript的索引访问类型提取数组元素的联合类型,同时调整泛型约束来保留数组的字面量类型信息。
修改后的类型定义
type GetValue = <T extends readonly string[]>(values: T, predicate: (v: T[number]) => boolean) => T[number];
关键说明
T extends readonly string[]:用readonly约束是为了让TypeScript能正确推断出数组字面量的具体元素类型(比如['a','b','c']会被推断为readonly ['a','b','c'],而不是宽泛的string[])。T[number]:这是TypeScript的索引访问语法,用来获取数组类型T中所有元素的类型,最终会生成这些元素的联合类型(比如上面的例子中就是'a' | 'b' | 'c')。- 给
predicate的参数加上T[number]类型,能让回调函数的参数类型更准确,避免出现any类型。
函数实现示例
如果你需要具体的函数实现,可以参考下面的代码:
const getValue: GetValue = (values, predicate) => { // 这里用类型断言是因为Array.find()可能返回undefined,如果你的业务逻辑确保一定会找到匹配元素,可以这么写 // 若要兼容找不到元素的场景,返回类型可以改为 T[number] | undefined return values.find(predicate) as T[number]; };
验证调用效果
const foundValue = getValue(['a', 'b', 'c'], x => x === 'a'); // foundValue 的类型会被正确推断为 'a' | 'b' | 'c'
内容的提问来源于stack exchange,提问作者Highmastdon
相关产品推荐
相关产品推荐

