typescript函數的隱式定義
在typescript中的函數并不需要刻意去定義惋鸥,比如我們實現一個加法函數:
const add = (a:number, b:number) => {a + b}
這種方式沒有顯示的去定義一個函數册舞,但是typescript是可以檢測到的
typescript函數的顯式定義
在變量后面加冒號與類型的定義竭鞍,括號里的(a:number, b:number)為參數類型惨缆,而通過=> 來鏈接與返回值寥裂,最后則是返回值的類型哈垢。
const add:(a:number, b:number) => number = (a:number, b:number) => a + b
函數的參數
- 可選參數
一個函數的參數可能是不存在的,可以使用鸵赖?來定義這種情況
const add (a:number, b?:number) => a + (b?b:0)
參數b有number與undefined兩種可能务漩。
- 默認參數
與javascript類似。
const add = (a:number, b= 0) => a + b
- 剩余參數
與javascript類似
const add = (a:number ,...rest:number[]) => rest.reduce(((a,b)=>a + b ),a)
重載
重載(overloading) 是在一個類里面它褪,方法名字相同饵骨,而參數不同。返回類型可以相同也可以不同茫打。
每個重載的方法(或者構造函數)都必須有一個獨一無二的參數類型列表居触。
- typescript重載的實現
// 重載
interface Direction {
top: number,
bottom?: number,
left?: number,
right?: number
}
function assigned(all: number): Direction
function assigned(topAndBottom: number, leftAndRight: number): Direction
function assigned(top: number, right: number, bottom: number, left: number): Direction
function assigned (a: number, b?: number, c?: number, d?: number) {
if (b === undefined && c === undefined && d === undefined) {
b = c = d = a
} else if (c === undefined && d === undefined) {
c = a
d = b
}
return {
top: a,
right: b,
bottom: c,
left: d
}
}
assigned(1)
assigned(1,2)
assigned(1,2,3)
assigned(1,2,3,4)