函数一般也会标识类型,主要是函数参数,函数返回值
type Sum = (a: string, b: string) => stringlet sum: Sum = function (a: string, b: string): string {return a + b;}// 函数中默认参数,可选参数,剩余运算符let sum: Sum = function (a: string = 'a', b?: string, ...args: string[]) {return a;}
声明函数类型中 this 类型
interface Worker {name: string}function working (this: Worker, time: number): string {return `${this.name} 已工作了 ${time} 小时`}working.call({ name: 'alex' } as Worker, 6)
声明了 this 类型之后就不能在不指定 this 的情况下调用了,因为不指定 this 时 this 类型为 void,跟 Worker 不一致
函数重载
function sum(a: number, b: number): numberfunction sum(a: string, b: string): stringfunction sum(a: string, b: number): stringfunction sum(a: number, b: string): stringfunction sum(a: string | number, b: string | number): string | number {if (typeof a === 'string' && typeof b === 'string') {return a + b;}if (typeof a === 'string' && typeof b === 'number') {return a + b;}if (typeof a === 'number' && typeof b === 'number') {return a + b;}if (typeof a === 'number' && typeof b === 'string') {return a + b;}return ''}sum(1, 2);sum('1', '2');sum('1', 2);sum(2, '1');
