# 函数类型

WARNING

  • 函数类型

    • 为函数定义类型
    • 完整的函数类型
    • 使用接口定义函数类型
    • 使用类型别名
  • 参数

    • 可选参数
    • 默认参数
    • 剩余参数
  • 重载

函数定义


function add (arg1: number, arg2: number): number {
	return arg1 + arg2
}

let add2 = (arg1: number, arg2: number) => arg1 + arg2

1
2
3
4
5
6
7
// 定义函数类型
let add3: (x: number, y: number) => number
add3 = (arg1: number, arg2: number): number => arg1 + arg2

1
2
3
4

接口定义函数类型

interface Add {
  (x: number, y: number): number
}
let addFun: Add = (arg1:number, arg2: number) => arg1 + arg2
1
2
3
4

类型别名定义函数类型

type AddT = (x: number, y: number) => number
let addFunT: AddT
addFunT = (arg1:number, arg2: number) => arg1 + arg2
1
2
3

函数的参数, 可选参数必须在最后面


type AddFunction = (arg1: number, arg2?:number) => number
let addFunction: AddFunction
addFunction = (x: number) => x
addFunction = (x: number, y: number | undefined) => x + (y ? y : 0)
1
2
3
4
5
// 参数设置默认值
let addFunction = (x: number, y = 3) => x + y
1
2
// 剩余参数
let handleData = (arg1: number, ...args: number[]) => {
  // ...
}
1
2
3
4

# 函数的重载

使用 function 来定义好几个函数,传入不同个数的参数,会自动判断出实际返回的结果

function handleDataStr(x: string): string[]
function handleDataStr(x: number): number[]
function handleDataStr(x: any): any {
	if (typeof x === 'string') {
		return x.split('')
	} else {
		return x.toString().split('').map((item:any) => Number(item))
	}
}
console.log(handleDataStr('abc'), '重载')
console.log(handleDataStr(123), '重载')
1
2
3
4
5
6
7
8
9
10
11