TypeScript类型 - tuple类型

265 阅读2分钟

TypeScript类型 - tuple类型

tuple是元组类型,很多语言中也有这种数据类型,比如Python、Swift等。

const tInfo: [string, number, number] = ['haha', 18, 1.88]
const item1 = tInfo[0] // haha, string类型
const item1 = tInfo[1] // 18,number类型

那么tuple和数组有什么区别呢?

  • 首先,数组中通常建议存放相同类型的元素,不同类型的元素是不推荐放在数组中。(可以放在对象或者元组中)
  • 其次,元组中每个元素都有自己特性的类型,根据索引值获取到的值可以确定对应的类型
const info: (string|number)[] = ['haha', 18, 1.88]
const item1 = info[0] // 不确定类型

const tInfo: [string, number, number] = ['haha', 18, 1.88]
const item2 = tInfo[0] // 一定是string类型

那么tuple在什么地方使用的是最多的呢?tuple通常可以作为返回的值,在使用的时候会非常的方便。

image.png

TypeScript类型 - 联合类型

TypeScript的类型系统允许我们使用多种运算符,从现有类型中构建新类型。联合类型是由两个或者多个其他类型组成的类型。表示可以是这些类型中的任何一个值。联合类型中的每一个类型被称之为联合成员。

function printId(id: number | string) {
    console.log(id)
}
printId(10)
printId('abc')

传入给一个联合类型的值是非常简单的:只要保证是联合类型中的某一个类型的值即可。但是我们拿到这个值之后,我们应该如何使用它呢?因为它可能是任何一种类型。比如我们拿到的值可能是string或者number,我们就不能对其调用string上的一些方法。那么我们怎么处理这样的问题呢?我们需要使用缩小(narrow)联合。TypeScript可以根据我们缩小的代码结构,推断出更加具体的类型。

function printId(id: number | string) {
    if(typeof id === 'string') {
        // 确定id是string类型
        console.log(id.toUpperCase())
    } else {
        // 确定id是number类型
        console.log(id)
    }
}