第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何用 TypeScript 提高 JS 工程的健壯性

如何用 TypeScript 提高 JS 工程的健壯性

蝴蝶不菲 2019-03-05 09:04:14
如何用 TypeScript 提高 JS 工程的健壯性
查看完整描述

2 回答

?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊

1. Typed Tuple
雖然 JavaScript 里一直沒(méi)有正宗的 Tuple 類(lèi)型,但是在 JavaScript 中使用 Tuple 一直都是很常見(jiàn)的事情,可以基于數(shù)組也可以基于對(duì)象,有了解構(gòu)賦值以后用數(shù)組還是對(duì)象的代碼量幾乎完全相同。
在 TypeScript ,如果我們需要一個(gè)具有靜態(tài)類(lèi)型的 Tuple,一種方式是定義一個(gè) interface 然后使用對(duì)象,但是這樣看起來(lái)比較麻煩。
另一種方式就是直接使用 TypeScript 提供的 Tuple 類(lèi)型:
let error: [number, string] = [123, 'Some Message'];
在 TypeScript 的類(lèi)型標(biāo)注中,當(dāng)我們把類(lèi)型寫(xiě)在方括號(hào)之前,就是 Typed Array,當(dāng)類(lèi)型寫(xiě)在方括號(hào)之中,就是 Typed Tuple 了。接著我們就可以使用類(lèi)型安全的方式解構(gòu)或者手動(dòng)取值:
// Both correctly typed
let [code, message] = error; // code is number and message is string
let anotherCode = error[0]; // anotherCode is number
let anotherMessage = error[1]; // anotherMessage is string
2. String Literal Type
當(dāng)我們需要使用靜態(tài)可枚舉的內(nèi)容時(shí),最正統(tǒng)的方式當(dāng)然是使用 Enum。不過(guò)對(duì)于一些需要和已有 JavaScript 類(lèi)庫(kù)交互時(shí),必須得使用 String 類(lèi)型,這時(shí)候往往會(huì)難以進(jìn)行靜態(tài)檢查(例如拼寫(xiě)錯(cuò)誤)。
這時(shí)候,可以使用 TypeScript 提供的 String Literal Type:
class Socket {
on (event: 'open' | 'message' | 'error' | 'close', cb) {
// ...
}
}
let mySock = new Socket();
socket.on('message', () => {});
這樣,如果傳入的 String 不在預(yù)設(shè)范圍內(nèi),就會(huì)報(bào)錯(cuò),從而實(shí)現(xiàn)靜態(tài)檢查效果。
3. Void
對(duì)于所有沒(méi)有返回值的函數(shù)或者方法,都應(yīng)該聲明為 Void 類(lèi)型,而不是留空,后者為 Any 類(lèi)型。
function log(message: string): void {
// ...
}
4. Implements Class
對(duì)于面向?qū)ο缶幊?,組合優(yōu)于繼承,但是對(duì)于組合,我們往往需要先定義一個(gè)接口類(lèi)型,然后再定義一個(gè)這個(gè)接口的實(shí)現(xiàn)類(lèi)型,十分繁瑣。
在 TypeScript 中,我們可以直接 Implements(而非 extends)一個(gè)(或多個(gè))類(lèi):
class Base1 {
method1 () {}
}
class Base2 {
method2 () {}
}
class MyClass implements Base1, Base2 {
constructor (private base1: Base1, private base2: Base2) {}
method1 () { return this.base1.method1(); }
method2 () { return this.base2.method2(); }
}
這樣,我們就不要像 Java 那樣先定義一個(gè) SomeInterface,再定義一個(gè) SomeImpl,再把自己的 Class 實(shí)現(xiàn) Interface,再把 SomeImpl 注進(jìn)來(lái)那么麻煩了。



查看完整回答
反對(duì) 回復(fù) 2019-03-15
  • 2 回答
  • 0 關(guān)注
  • 440 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)