函数的类型
函数中需要被定义类型的地方有两处:接收的参数和返回值
1 2 3 4 5 6 7 8 9 10 11 12
|
function add(a:number, b:number): number { return a+b } console.log(add(114,514))
const sub = (a:number, b:number): number=> { return a-b } console.log(sub(114,514))
|
接口定义函数
1 2 3 4 5 6 7 8
| interface Add { (a:number, b:number): number } const add:Add = (a:number, b:number):number => { return a + b } add(5,5)
|
默认值参数和可选参数
在调用函数时,这两种参数都是非必传值的参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| function add(a:number=114, b:number=514): number { return a+b }
console.log(add())
console.log(add(1919))
console.log(add(810,364))
function sub(a:number, b?:number): number { return a-b }
console.log(sub(114514))
console.log(sub(1919,810))
|
引用类型参数
定义接口,并将参数的类型指定为该接口即可
1 2 3 4 5 6 7 8 9 10 11 12 13
| interface User { name: string age: number }
function addAge(user:User):User { return { name: user.name, age: user.age+1 } }
console.log(addAge({name:"yajue",age:23}))
|
剩余参数
函数中的剩余参数也可以定义类型(应是某种数组)
1 2 3 4 5 6 7 8 9
|
const fn = (array:number[],...items:any[]):any[] => { console.log(array,items) return items } let a:number[] = [1,2,3] fn(a,'4','5','6')
|
函数this类型
TS可以定义this的类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| interface Obj { user:number[] add:(this:Obj,num:number)=>void }
let obj:Obj = { user: [1,2,3], add(this:Obj,num:number) { this.user.push(num) console.log(this.user) } }
obj.add(4)
|
函数重载
可以根据参数和返回值类型的不同,让一个函数实现不同的功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| let user:number[] = [1,2,3]
function findNum(add:number[]):number[]
function findNum(id:number):number[]
function findNum():number[]
function findNum(ids?:number|number[]):number[] { if(typeof ids == "number") { return user.filter(v=>v==ids) } else if(Array.isArray(ids)) { user.push(...ids) return user } else { return user } }
|