You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用工具类型将函数返回值指定为数组元素的联合类型

如何让函数返回值类型为输入数组元素的联合类型

要实现你需要的效果,核心是利用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:50:21