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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:16:26