如何编写返回类型为数组值联合类型的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
相关产品推荐
相关产品推荐

