Typescript進(jìn)階

類型別名

類型別名用來給一個類型起個新名字。

type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;
function getName(n: NameOrResolver): Name {
    if (typeof n === 'string') {
        return n;
    } else {
        return n();
    }
}

上例中,我們使用 type 創(chuàng)建類型別名。

字符串字面量類型

字符串字面量類型用來約束取值只能是某幾個字符串中的一個。

type EventNames = 'click' | 'scroll' | 'mousemove';
function handleEvent(ele: Element, event: EventNames) {
    // do something
}

handleEvent(document.getElementById('hello'), 'scroll');  // 沒問題
handleEvent(document.getElementById('world'), 'dbclick'); // 報錯,event 不能為 'dbclick'

// index.ts(7,47): error TS2345: Argument of type '"dbclick"' is not assignable to parameter of type 'EventNames'.

上例中,我們使用 type 定了一個字符串字面量類型 EventNames,它只能取三種字符串中的一種。

注意,類型別名與字符串字面量類型都是使用 type 進(jìn)行定義。

元組

元組(Tuple)合并了不同類型的對象
例子: 定義一對值分別為 string 和 number 的元組:

let xcatliu: [string, number] = ['Xcat Liu', 25];

當(dāng)直接對元組類型的變量進(jìn)行初始化或者賦值的時候,需要提供所有元組類型中指定的項;其他情況可以只賦值一個元素。

枚舉

枚舉用于取值被限制在一定范圍內(nèi)的場景,枚舉使用 enum 關(guān)鍵字來定義:

enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat};

枚舉成員會被賦值為從 0 開始遞增的數(shù)字,同時也會對枚舉值到枚舉名進(jìn)行反向映射。
枚舉項的值也可以手動賦值,未手動賦值的枚舉項會接著上一個枚舉項遞增。

enum Days {Sun = 7, Mon = 1, Tue, Wed, Thu, Fri, Sat};

注:當(dāng)有相同值的時候,后面賦值的會覆蓋前面的。

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

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

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