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

如何编写返回类型为数组值联合类型的Typescript函数

TypeScript 实现返回数组值联合类型的方案

你需要通过泛型捕获传入数组的字面量类型,避免类型被拓宽为通用string类型即可实现需求,完整可运行代码如下:

// TS 5.0+ 版本支持const泛型,调用时无需额外断言
function within<const T extends string>(values: T[]) {
    return (val: unknown): T => {
      if(!values.includes(val as T)) throw new Error('Not allowed')
      return val as T
    }
}

调用within(['a', 'b'])后,ReturnType<within(['a', 'b'])>的推导结果就是'a' | 'b',完全符合预期。

如果你使用的是5.0以下的TypeScript版本,无法使用const泛型语法,可以改用手动加as const断言的方案:

function within<T extends string>(values: T[]) {
    return (val: unknown): T => {
      if(!values.includes(val as T)) throw new Error('Not allowed')
      return val as T
    }
}

// 调用时加as const保留字面量类型
type Res = ReturnType<within(['a', 'b'] as const)>
// Res的类型等价于 'a'|'b'

内容的提问来源于stack exchange,提问作者Asur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 18:51:03