likes
comments
collection
share

TypeScript-起步——TypeScript类型(四)

作者站长头像
站长
· 阅读数 52

3、其他类型

① 对象类型

  1. 如果我们希望限定一个函数接受的参数是一个对象,这个时候要如何限定呢?

    • 我们可以使用对象类型;

      function printPoint(point: {x: number, y: number}) {
        console.log(`x 坐标:${point.x}`);
        console.log(`x 坐标:${point.y}`);
      }
      
      printPoint({x: 10, y: 100})
      
  2. 在这里我们使用了一个对象来作为类型:

    • 在对象我们可以添加属性,并且告知TypeScript该属性需要是什么类型;
    • 属性之间可以使用 , 或者 ; 来分割,最后一个分隔符是可选的;
    • 每个属性的类型部分也是可选的,如果不指定,那么就是any类型;

② 可选类型

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

    function printPoint(point: {x: number, y: number, z?: number}) {
      console.log(`x 坐标:${point.x}`);
      console.log(`x 坐标:${point.y}`);
    
      if(point.z) {
        console.log(`z 坐标:${point.z}`);
      }
    }
    
    printPoint({x: 10, y: 100})
    printPoint({x: 10, y: 100, z: 30})
    
    • 注意: 需要操作可选类型的时候,必须要进行判断是否存在,再进行操作

③ 联合类型

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

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

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

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

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

      function prindId(id: number | string) {
        console.log(`你的 ID 是:${id}`);
      }
      
      prindId(1551724864)
      prindId('1551724864')
      

Ⅰ. 使用联合类型

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

    • 但是我们拿到这个值之后,我们应该如何使用它呢?因为它可能是任何一种类型。
    • 比如我们拿到的值可能是string或者number,我们就不能对其调用string上的一些方法;
  2. 那么我们怎么处理这样的问题呢?

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

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

      function prindId(id: number | string) {
        if(typeof id === 'string') {
          console.log(`你的 ID 是:${id.toUpperCase()}`);
        } else {
          console.log(`你的 ID 是:${id}`);
        }
      }
      
      prindId(1551724864)
      prindId('abcdefg')
      
    • 注意: 每一种不同的类型中,其包含的方法也是不一样的,为了在使用的时候报错,需要对类型进行判断,根据不同类型进行对应的操作。

转载自:https://juejin.cn/post/7135075190161014792
评论
请登录