TypeScript语法(十二)

109 阅读2分钟

可选类型

对象类型也可以指定哪些属性是可选的,可以在属性的后面添加一个?:

// Point: x/y/z -> 对象类型
// {x: number, y: number, z?: number}
function printPoint(point: {x: number, y: number, z?: number}) {
  console.log(point.x)
  console.log(point.y)
  console.log(point.z)
}

printPoint({x: 123, y: 321})
printPoint({x: 123, y: 321, z: 111})

export {}

联合类型

TypeScript的类型系统允许我们使用多种运算符,从现有类型中构建新类型。

我们来使用第一种组合类型的方法:联合类型(Union Type)

联合类型是由两个或者多个其他类型组成的类型;

表示可以是这些类型中的任何一个值;

联合类型中的每一个类型被称之为联合成员(union's members)

// number|string 联合类型
function printID(id: number|string|boolean) {
  // 使用联合类型的值时, 需要特别的小心
  // narrow: 缩小
  if (typeof id === 'string') {
    // TypeScript帮助确定id一定是string类型
    console.log(id.toUpperCase())
  } else {
    console.log(id)
  }
}

printID(123)
printID("abc")
printID(true)

使用联合类型

传入给一个联合类型的值是非常简单的:只要保证是联合类型中的某一个类型的值即可

但是我们拿到这个值之后,我们应该如何使用它呢?因为它可能是任何一种类型。

比如我们拿到的值可能是string或者number,我们就不能对其调用string上的一些方法;

那么我们怎么处理这样的问题呢?

我们需要使用缩小(narrow)联合(后续我们还会专门讲解缩小相关的功能);

TypeScript可以根据我们缩小的代码结构,推断出更加具体的类型;

// 一个参数一个可选类型的时候, 它其实类似于是这个参数是 类型|undefined 的联合类型
// function foo(message?: string) {
//   console.log(message)
// }

function foo(message?: string) {
  console.log(message)
}

foo()

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第40天,点击查看活动详情