TS 之联合类型

发布于 2023-05-04 21:21:00 字数 1633 浏览 43 评论 0

联合类型(Union Types)表示取值可以为多种类型中的一种。联合类型使用 | 分隔每个类型。

简单例子

// 联合类型
let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;

这里的 let myFavoriteNumber: string | number 的含义是,允许 myFavoriteNumber 的类型可以是 string 或者 number ,但不能是其他类型。

let myFavoriteNumber: string | number;
myFavoriteNumber = true;

// Type 'boolean' is not assignable to type 'string | number'.

访问联合类型的属性或方法

当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型共有的属性或方法

function getLength(something: string | number): number {
    return something.length;
}

// Property 'length' does not exist on type 'string | number'.
// Property 'length' does not exist on type 'number'.

上述例子中,length 不是 stringnumber 的共有属性,所以会报错。访问 stringnumber 的共有属性是没有问题的。

function getString(something: string | number): string {
    return something.toString();
}

联合类型的变量再被赋值的时候,会根据推论的规则推断出一个类型:

let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';             // 被推断成 string
console.log(myFavoriteNumber.length);   // 5
myFavoriteNumber = 7;                   // 被推断成 number
console.log(myFavoriteNumber.length);   // 编译时报错

// Property 'length' does not exist on type 'number'.

上述例子中,第二行的 myFavoriteNumber 被推断成了 string,访问它的 length 属性不会报错。而第四行的 myFavoriteNumber 被推断成了 number,访问它的 length 属性时自然就会报错了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

不必你懂

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

eins

文章 0 评论 0

世界等同你

文章 0 评论 0

毒初莱肆砂笔

文章 0 评论 0

初雪

文章 0 评论 0

miao

文章 0 评论 0

qq_zQQHIW

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文