迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > TypeScript >

仅允许具有 TypeScript 类型的特定字符串值

作者:迹忆客 最近更新:2023/01/29 浏览次数:

使用字符串文字类型仅允许使用 TypeScript 类型的特定字符串值,例如 const str: 'draft' | 'sent' = 'draft';. 字符串文字允许我们引用类型位置中的特定字符串。 如果指定的字符串不是文字类型,则会抛出错误。

// ✅ with interface
interface Person {
  name: 'Alice' | 'Bob' | 'Carl';
}

const p: Person = {
  name: 'Alice',
};

// ✅ with 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');

这些示例展示了如何使用字符串文字类型来仅允许分配给特定的字符串值。

字符串文字类型允许我们引用类型位置中的特定字符串。

分配不是文字类型成员的字符串会导致错误。

// ⛔️ Type '"hello"' is not assignable to
// type '"draft" | "sent"'.ts(2322)
const str: 'draft' | 'sent' = 'hello';

考虑字符串文字类型的一种简单方法是 - 它们是具有特定字符串值而不是类型的联合类型。

文字类型也可用于数字和布尔值。 例如,类型 boolean 只是联合类型 true | false 的别名。

或者,我们可以使用枚举。

使用枚举仅允许使用 TypeScript 类型的特定字符串值,例如 const emailStatus: EmailStatus = EmailStatus.Read;。 枚举允许我们定义一组命名常量。 如果指定的字符串不是枚举的成员,则会抛出错误。

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;

枚举有时比字符串文字类型更容易阅读。

请注意 ,枚举是真实对象,存在于运行时。 我们可以使用点符号来访问枚举的属性。

示例中的 emailStatus 变量只能具有 EmailStatus 枚举中存在的 3 个值之一。

分配不同的字符串会导致类型检查器抛出错误。

enum EmailStatus {
  Read = 'READ',
  Unread = 'UNREAD',
  Draft = 'DRAFT',
}

// ⛔️ Error: Type '"hello"' is not
// assignable to type 'EmailStatus'.ts(2322)
const emailStatus: EmailStatus = 'hello';

使用枚举优于字符串文字类型的主要优点是 - 它们使我们的代码更易于阅读和组织。

枚举的全部目的是定义一组命名和相关的常量。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 TypeScript 中返回一个 Promise

发布时间:2023/03/19 浏览次数:182 分类:TypeScript

本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便