TypeScript四:函數(shù)

函數(shù)的標(biāo)注

一個函數(shù)的標(biāo)注包含參數(shù)和返回值

// 函數(shù)聲明
function fn(a: string): string {
    return a
}

// 函數(shù)表達(dá)式
// 字面量
let fn2: (a: string) => string = function (a) {
    return a
}
// type
type fn = (a: string) => string
let fn3: fn = function (a) {
    return a
}
// interface
interface Ifn {
    (a: string): string
}
let fn4: Ifn = function (a) {
    return a
}

可選參數(shù)

// 函數(shù)聲明
function fn(a: string, b?: string): string {
    return a
}
fn('1')
fn('1', '2')

// 函數(shù)表達(dá)式
let fn2: (a: string, b?: string) => string = function (a, b) {
    return a
}
fn2('1')
fn2('1', '2')

默認(rèn)參數(shù)

有默認(rèn)值的參數(shù)也是可選的

function fn3(a: string, b = ''): string {
    return a + b
}
//可以結(jié)合聯(lián)合類型
function fn4(a: string, b: '1' | '2' = '1'): string {
    return a + b
}
fn3('1')
fn3('1', '2')
fn4('1', '3')// error

剩余參數(shù)

注意:剩余參數(shù)是一個數(shù)組
interface IObj {
    [key: string]: any;
}

function merge(target: IObj, ...others: Array<IObj>): IObj {
    return Object.assign(target, ...others)
}

let newObj = merge({x: 1}, {y: 2}, {z: 3});
console.log(newObj);//{ x: 1, y: 2, z: 3 }

函數(shù)中的this

普通函數(shù)

對于普通函數(shù)而言, this 是會隨著調(diào)用環(huán)境的變化而變化的,所以默認(rèn)情況下,普通函數(shù)中的 this被標(biāo)注為 any .

但可以在函數(shù)的第一個參數(shù)位上顯式的標(biāo)注 this ,(它不占據(jù)實際參數(shù)位置)

interface Iobj {
    a: number;
    fn: (b: number) => number
}

let obj: Iobj = {
    a: 1,
    fn(this: Iobj, b) { //標(biāo)注 this,不占據(jù)實際參數(shù)位置
        return this.a + b
    }
}
console.log(obj.fn(2))//3
let fn2 = obj.fn    //但是變成了不是預(yù)期的this類型,ts不會報錯
console.log(fn2(2))//NaN 

箭頭函數(shù)

箭頭函數(shù)的this 標(biāo)注類型取決于它所在的作用域 this

interface Iobj {
    a: number;
    fn: () => Function;
}

let obj: Iobj = {
    a: 1,
    fn(this: Iobj) {
        return () => this
    }
}

console.log(obj.fn()());

函數(shù)重載

有時候,同一個函數(shù)會接收不同類型的參數(shù)返回不同類型的返回值,可以使用函數(shù)重載來實現(xiàn)。

重載函數(shù)類型只需要定義結(jié)構(gòu),有一個實現(xiàn)就可以。
//定義結(jié)構(gòu)一
function showOrHide(ele: HTMLElement, attr: 'display', value: 'block' | 'none'): void;
//定義結(jié)構(gòu)二
function showOrHide(ele: HTMLElement, attr: 'opacity', value: number): void;
//實現(xiàn)
function showOrHide(el: HTMLElement, attr: any, value: any) {
    if (attr === 'display') {
        // ...
    } else {
        //...
    }
}

//使用
let div = document.querySelector('div');
if (div) {
    showOrHide(div, 'display', 'block');
    showOrHide(div, 'display', 'none');
    showOrHide(div, 'opacity', 1);

    showOrHide(div, 'opacity', 'block');//error
    showOrHide(div, '123', 1);//error
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 介紹 函數(shù)是JavaScript應(yīng)用程序的基礎(chǔ)。 它幫助你實現(xiàn)抽象層,模擬類,信息隱藏和模塊。 在TypeScri...
    年輕人多學(xué)點閱讀 238評論 0 1
  • 介紹 函數(shù)是 JavaScript 應(yīng)用程序的基礎(chǔ),它幫助你實現(xiàn)抽象層、模擬類、信息隱藏和模塊。在 TypeScr...
    24KBING閱讀 388評論 0 0
  • 日期: 2019 年 9 月 3 日 typescript 函數(shù) 具名函數(shù)與匿名函數(shù) 和JavaScript一樣,...
    五十嵐色葉閱讀 404評論 0 2
  • 函數(shù)是JavaScript應(yīng)用程序的基礎(chǔ)。 它幫助你實現(xiàn)抽象層,模擬類,信息隱藏和模塊。 在TypeScript里...
    2o壹9閱讀 636評論 0 49
  • 1. 函數(shù)聲明 1.1 函數(shù)聲明法 1.2 函數(shù)表達(dá)式 1.3 匿名函數(shù) TypeScript中的函數(shù)也是...
    淺憶_0810閱讀 394評論 0 1

友情鏈接更多精彩內(nèi)容