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

TypeScript泛型First疑问:为何返回字面量类型而非基础类型?

问题解答

为什么type arr1 = ["a", "b", "c"]时First<arr1>返回'a'而非string?

你用type定义的arr1是元组类型,且是包含字符串字面量的固定长度元组。TypeScript对这种直接定义的元组,会精确保留每个元素的字面量类型(比如'a'、'b'这类具体的字符串值类型),不会自动拓宽成宽泛的string类型。所以T[0]取的就是元组第一个元素的精确类型,这完全符合挑战要求的“返回第一个元素的类型”——这里的类型就是字面量类型本身,而非宽泛的父类型。

为什么let arr1 = ["a", "b", "c"]时First<typeof arr1>返回string?

用let声明数组变量时,TypeScript的默认类型推断会把它处理成可变的宽泛数组类型(即string[])。因为let声明的变量允许修改,TypeScript默认认为你后续可能会给数组添加其他string类型的元素,所以不会推断成固定长度的元组,也不会保留元素的字面量类型。此时typeof arr1得到的类型是string[],First<string[]>自然返回string类型。

如果想让let声明的数组也得到字面量元组类型,可以用as const断言:

let arr1 = ["a", "b", "c"] as const;
type head1 = First<typeof arr1>; // 此时head1的类型是'a'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:10:44