TypeScript-起步——TypeScript类型(四)
3、其他类型
① 对象类型
-
如果我们希望限定一个函数接受的参数是一个对象,这个时候要如何限定呢?
-
我们可以使用对象类型;
function printPoint(point: {x: number, y: number}) { console.log(`x 坐标:${point.x}`); console.log(`x 坐标:${point.y}`); } printPoint({x: 10, y: 100})
-
-
在这里我们使用了一个对象来作为类型:
- 在对象我们可以添加属性,并且告知TypeScript该属性需要是什么类型;
- 属性之间可以使用 , 或者 ; 来分割,最后一个分隔符是可选的;
- 每个属性的类型部分也是可选的,如果不指定,那么就是any类型;
② 可选类型
-
对象类型也可以指定哪些属性是可选的,可以在属性的后面添加一个
?
: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})
- 注意: 需要操作可选类型的时候,必须要进行判断是否存在,再进行操作
③ 联合类型
-
TypeScript的类型系统允许我们使用多种运算符,从现有类型中构建新类型。
-
我们来使用第一种组合类型的方法:联合类型(Union Type)
-
联合类型是由两个或者多个其他类型组成的类型;
-
表示可以是这些类型中的任何一个值;
-
联合类型中的每一个类型被称之为联合成员(union's members);
function prindId(id: number | string) { console.log(`你的 ID 是:${id}`); } prindId(1551724864) prindId('1551724864')
-
Ⅰ. 使用联合类型
-
传入给一个联合类型的值是非常简单的:只要保证是联合类型中的某一个类型的值即可
- 但是我们拿到这个值之后,我们应该如何使用它呢?因为它可能是任何一种类型。
- 比如我们拿到的值可能是string或者number,我们就不能对其调用string上的一些方法;
-
那么我们怎么处理这样的问题呢?
-
我们需要使用缩小(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