仅允许具有 TypeScript 类型的特定字符串值
Allow only specific string values with TypeScript type
使用字符串文字类型仅允许 TypeScript 类型中的特定字符串值,例如const str: 'draft' | 'sent' = 'draft';
.
字符串文字允许我们引用类型位置中的特定字符串。如果指定的字符串不是文字类型,则会抛出错误。
// ✅ with an interface interface Person { name: 'Alice' | 'Bob' | 'Carl'; } const p: Person = { name: 'Alice', }; // ✅ with a Type Alias type Sizes = 'small' | 'medium' | 'large'; const s: Sizes = 'small';
这里还有两个例子。
// ✅ inline const str: 'draft' | 'sent' = 'draft'; // ✅ for function parameters function logMessage(message: 'hello world' | 'howdy world') { console.log(message); } logMessage('hello world');
这些示例展示了如何使用
字符串文字类型
来仅允许分配给特定的字符串值。
interface Person { name: 'Alice' | 'Bobby Hadz' | 'Carl'; } const p: Person = { name: 'Bobby Hadz', }; console.log(p.name); // 👉️ Bobby Hadz
字符串文字类型允许我们引用类型位置中的特定字符串。
分配不是文字类型成员的字符串会导致错误。
// ⛔️ Type '"bobbyhadz.com"' is not assignable // to type '"draft" | "sent"'. const str: 'draft' | 'sent' = 'bobbyhadz.com';
考虑字符串文字类型的一种简单方法是,它们是
具有特定字符串值而不是类型的联合类型。
您还可以在键入函数参数时使用字符串文字类型。
function logMessage(message: 'hello world' | 'howdy world') { console.log(message); } // ✅ Works logMessage('hello world'); // ⛔️ Error logMessage('bobbyhadz.com');
可以使用两个字符串之一调用该函数,尝试使用任何其他值调用它会导致错误。
boolean
true | false
仅允许使用枚举的 TypeScript 类型的特定字符串值
或者,您可以使用
enum。
枚举允许我们定义一组命名常量。如果指定的字符串不是枚举的成员,则会抛出错误。
enum EmailStatus { Read = 'READ', Unread = 'UNREAD', Draft = 'DRAFT', } // ✅ using interfaces interface JobEmails { status: EmailStatus; } const obj: JobEmails = { status: EmailStatus.Read, }; // ✅ inline assignment const emailStatus: EmailStatus = EmailStatus.Read;
枚举有时比字符串文字类型更容易阅读。
The emailStatus
variable can only have one of the 3 values that are present in
the EmailStatus
enum.
An assignment of a different string would cause the type checker to throw an
error.
enum EmailStatus { Read = 'READ', Unread = 'UNREAD', Draft = 'DRAFT', } // ⛔️ Error: Type '"bobbyhadz.com"' is not // assignable to type 'EmailStatus'.ts(2322) const emailStatus: EmailStatus = 'bobbyhadz.com';
The main advantage of using enums over string literal types is that they make
your code easier to read and organize.
The whole purpose of enums is to define a group of named and related
constants.
I’ve also written an article on
how to check if a string is in a union.
# Additional Resources
You can learn more about the related topics by checking out the following
tutorials: