TypeScript特殊类型咨询:语法解析、初始化与赋值方法
你遇到的应该是「字面量混合联合类型」(或基础
string | number联合类型) 嘿,我猜你碰到的是字面量混合联合类型——就是把特定的字符串字面量和数字字面量捏在一起的联合类型,比如 type Status = "active" | "inactive" | 0 | 1 这种。如果是更宽泛的所有字符串/数字的联合,那就是TypeScript最基础的 string | number 联合类型,可能你之前搜索的关键词没对上才没找到官方说明。
通俗解释
你可以把它看成一个「专属值的白名单」:变量只能取这个名单里的某一个值——要么是名单里的字符串,要么是名单里的数字,既不能是名单外的其他字符串/数字,也不能是数组、元组这种装多值的容器。比如上面的Status类型,变量只能是"active"、"inactive"、0、1这四个值里的一个,要是赋值"pending"或者2,TypeScript直接给你报错。
如果是基础的string | number联合类型,那这个白名单就大了——涵盖所有字符串和数字,变量只要是字符串或数字都合法。
初始化方法
两种类型的初始化都很直接,直接给符合要求的值就行:
字面量混合联合类型
// 定义类型 type MySpecialType = "start" | "end" | 100 | 200; // 合法初始化 let step1: MySpecialType = "start"; let score: MySpecialType = 200; // 非法(不在白名单里),会报错 // let wrong: MySpecialType = "middle";
基础string | number联合类型
type StringOrNumber = string | number; // 合法初始化 let username: StringOrNumber = "jacobs"; let age: StringOrNumber = 30;
如何「添加值」
TypeScript是静态类型语言,一旦定义好类型别名就没法直接修改。如果要扩展这个类型的可选值,你得重新定义一个新的类型别名,把原类型和新值合并:
// 原类型 type OriginalType = "a" | "b" | 1 | 2; // 扩展后的新类型 type ExtendedType = OriginalType | "c" | 3; // 新值合法 let newValue: ExtendedType = "c"; // 旧值依然合法 let oldValue: ExtendedType = 1;
要是基础string | number想加其他类型(比如布尔值),同样用这个方法:type ExtendedUnion = StringOrNumber | boolean;
内容的提问来源于stack exchange,提问作者Jacobs
相关产品推荐
相关产品推荐

