3.4数组类型

数组类型的两种写法:(推荐使用number[]写法)

1
2
let numbers :number[]=[1,3,5]
let strings :Array<string> =['a','b','c']

需求:数组中既有number类型,又有string类型,这个数组的类型应该如何写?

1
2
3
4
let arr :(number|string)[] = [1,'a',3,'b']//小括号一定要有

//如果去掉括号的话就变成
let arr :number|string[] = [1,'a',3,'b']//语法错误!!!只能放number类型或sring类型的数组。注意此时写成let arr :number|string[] = [1,3] 也是会报错的,此时的number不是数组类型。正确的为 let arr :number|string[] = [123] 或者 let arr :number|string[] = ['a','b']
3.5类型别名

类型别名:为任意类型起别名

使用场景:当同一类型(复杂)被多次使用时,可以通过类型别名,简化该类型的使用

解释:

  1. 使用type关键字创建类型别名
  2. 创建类型别名后,直接使用该类型别名作为变量的类型注解即可
3.6函数类型

函数的类型实际上指的是:函数参数返回值的类型

为函数指定类型的两种方式:

1.单独指定参数、返回值的类型

2.同时指定参数、返回值的类型(这个写法了解就行)

如果函数没有返回值,那么返回值类型为:void

如果函数实现某个功能时,参数可以传也可以不传。这种情况下,在给函数参数指定类型时,就用到可选参数了,比如 数组slice方法,可以是slice()也可以slice(1)还可以slice(1,3)。

解释:

可选参数:在可传可不传的参数名称后面添加❓

注意:可选参数只能出现在参数列表的最后,也就是说可选参数后面不能再出现必须参数。

3.7对象类型

JS中的对象是由属性和方法构成的,而TS中对象的类型就是在描述对象的结构。

解释:

  1. 直接使用{}来描述对象结构。属性采用属性名:类型的形式;方法采用方法名():返回值类型的形式。
  2. 如果方法有参数,就在方法名后面的小括号中指定参数类型。比如greet(name: string) :void
  3. 在一行代码中指定对象的多个属性类型时,使用;来分隔。如果一行代码只指定一个类型属性,可以去掉;就连,都不用添加
1
2
3
4
5
6
7
8
9
10
11
12
13
14
let person:{name: string
age:number
sayHi():void
greet(name: string) :void
} = {
name: 'zhangsan',
age: 18,
sayHi() {

},
greet(name) {

},
}

对象的属性或方法,也是可选的,此时就用到可选属性

比如,我们在使用axios({…})时,如果发送GET请求,method属性就可以省略。

3.8接口

当一个对象类型被多次使用时,一般会使用接口(interface) 来描述对象的类型,达到复用的目的。

interface(接口)和type(类型别名)的对比:

  • 相同点:都可以给对象指定类型
  • 不同点
    • 接口,只能为对象指定类型。
    • 类型别名,不仅可以为对象指定类型,还可以为任意类型指定别名。

如果两个接口之间有相同的属性或方法,可以将公共 的属性或方法抽离出来,通过继承来实现复用。