定义函数类型
( params: type ) => type
type Func = ( params: type ) => type
- 小括号中的是形参与类型,箭头后的是返回值类型
- 可以直接在变量后使用,也可以定义一个类型别名后使用
let func: Func = params => params
定义函数
使用函数类型
let func: ( params: type ) => type = params => params
let func: ( params: type ) => type = function (params) {
return params
}
let func: Function = params => params
- 小括号中的是形参与类型,箭头后的是返回值类型
- Function类型不会对函数有任何的要求
function声明、箭头函数
function name ( params: type ): type {}
const name = ( params: type ): type => {}
接口
interface Func {
( params: type ): type
}
const func: Func = function ( params ) {}
参数
( p1: type, p2?: type, p3:type = 123, ...p4: any[] ) => tyep
//必传参数 可选参数 参数默认值 多余参数
- 必传参数:调用时必须传的参数,否则会报错
- 可选参数:调用时可不传的参数,在形参后加
**?**
定义 - 参数默认值:形参的默认值,使用
**=**
赋值;有默认值的形参等同于可选参数 - 多余参数:会接收从自身开始向后的所有实参,是个数组,使用
**...**
定义,之能是最后一个形参
函数重载
TS中的重载:允许使用function定义多个同名函数,调用时会根据传入的参数及个数得到对应的类型提示,接口中的方法与函数也能进行重载
function func (p1: string): string[]
function func (p1: number): number[]
function func (p1: any): (number | string)[] [] { // 实体函数
if ( typeof === 'string' ){
return p1.split('')
} else if ( typeof === 'number' ) {
return p1.toString().split('').map(item => parseInt(item))
} else {
return [ p1 ]
}
}
- 最后一个声明的才是实体函数,不是重载的一部分;上面的才是函数重载
- 调用函数时,实际调用的是那个实体函数
- 因此实体的参数和返回值需要包括重载中定义的,否则会报错,最好是any
- 需要手动对参数进行判断,并返回不同的结果