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

联合类型能否作为泛型参数?为何符合string类型约束?

问题解答

你传入的这个联合类型其实是string类型的子类型,所以完全符合T extends string的泛型约束,这就是它能被传入函数的原因。

在TypeScript里,单个的字符串字面量(比如"--border-color")本身就是string的子类型——你可以把任何字符串字面量赋值给string类型的变量,但反过来不行。而由多个字符串字面量组成的联合类型,本质上是这些子类型的集合,整个联合类型自然也属于string的子类型,满足extends string的要求。

比如你定义的这个联合类型:

| "--text-color"
| "--background-color"
| "--border-radius"
| "--border-width"
| "--border-style"
| "--border-color"

它的每个成员都是具体的字符串值,都属于string类型的范畴,所以整个联合类型完全符合T extends string的约束条件,能作为泛型参数传入fun3函数。

另外,你其实不用手动指定这个泛型参数——TypeScript会自动根据你传入的"--border-color"推导出T的类型,代码可以简化成:

const aa = fun3("--border-color");

此时T会被自动推断为"--border-color"这个字面量类型,同样满足extends string的约束。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:45:43