联合类型能否作为泛型参数?为何符合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
相关产品推荐
相关产品推荐

