函数参数定义类型(type)
函数类型
如果省略参数类型,默认是any
1)完整的函数:一个完整的函数应该包含参数类型和返回值类型,如果用了函数体以外定义的变量,这个变量类型不体现在函数类型定义
2)用接口定义函数:可以清晰的定义函数类型
3)用类型别名:更直观易读
参数
1)可选参数:(type定义可选参数)必选参数必须在可选参数的前面
2)默认参数:直接给形参赋值,没限制的话就根据写的来返回
3)剩余参数:如果定义一个函数可以输入任意个参数,那我们在定义参数列表的时候无法挨个定义,es6发布前,我们用arguments来获取参数列表
interface
定义函数需要传的参数较多的时候,可以用到interface
可选属性
格式:属性名 ?:类型
那么这个参数就可传可不传
多余属性
格式:[prop:string]:any
多余属性检查
如果没有这个属性就会报错没有这个属性
绕开多余属性检查
1)使用类型断言 as <>
2)使用多余属性 [prop:string]:any
3)利用类型兼容性
只读属性(readonly)
1)使用const修改常量里的属性会报错
2)使用const定义一个对象,修改对象里面属性不会报错,如果需要对象里的属性不可以修改,就使用readonly
type和interface
相同:1)都可以描述一个对象或者函数
2)都可以被继承
不同:1)interface是声明一个类型,type是赋值可以进行别名的修改
2)interface只能声明对象,type可以声明基础类型数据
3)interface可以使用extends/implements进行继承,type不可以继承,因为type是类型别名,属于赋值
4)interface可以继承type,但只能继承对象形式的type
5)interface可以重复声明且自动合并,type不可以重复声明,自动匹配第一个