TypeScript 交叉型別
交叉型別(Intersection Types)可以將現有的多種型別疊加到一起成為一種型別。
也就是說它包含了所有型別的特性,程式碼例項如下:
[typescript] 純文字檢視 複製程式碼A & B & C
上面的交叉型別同時具有A、B和C三種型別的成員。
較多在混入(mixins)或其它不適合典型物件導向模型的地方看到交叉型別的使用。
程式碼例項如下:
[typescript] 純文字檢視 複製程式碼function extend<T, U>(first: T, second: U): T & U { let result = <T & U>{}; for (let id in first) { (<any>result)[id] = first[id]; } for (let id in second) { if (!result.hasOwnProperty(id)) { (<any>result)[id] = (<any>second)[id]; } } return result; }
上面的程式碼相對比較簡單,可能下面這一段程式碼會產生疑問:
[typescript] 純文字檢視 複製程式碼(<any>result)[id] = first[id];
既然result已經被斷言為交叉型別,那麼first所具有的屬性result都是具有的。
為什麼還要將result斷言為Any型別呢,因為交叉型別可能導致型別衝突。
看如下程式碼例項:
[typescript] 純文字檢視 複製程式碼interface T1 { a: boolean; b: string; } interface T2 { a: boolean; b: number; } type T = T1 & T2; type Ta = T['a']; // boolean type Tb = T['b']; // string & number declare const t: T; declare const t1: T1; t['b'] = t1['b'];
上面的程式碼中,T1和T2介面中,b屬性型別衝突,那麼最終b屬性型別為交叉型別string & number,同時string型別或者number型別無法賦值給交叉型別string & number,最終導致報錯。為了解決這個問題,可以將resut再斷言為Any型別,這樣result所有屬性均為Any型別,那麼賦值就不會報錯了。
相關文章
- JavaScript 和 TypeScript 交叉口 —— 型別定義檔案(*.d.ts)JavaScriptTypeScript型別
- TypeScript this型別TypeScript型別
- TypeScript 泛型型別TypeScript泛型型別
- TypeScript 型別相容TypeScript型別
- Typescript:基本型別TypeScript型別
- TypeScript 字串型別TypeScript字串型別
- TypeScript Never型別TypeScript型別
- TypeScript Any型別TypeScript型別
- TypeScript 索引型別TypeScript索引型別
- TypeScript 型別安全TypeScript型別
- TypeScript type 型別別名TypeScript型別
- TypeScript 型別系統TypeScript型別
- Typescript高階型別TypeScript型別
- TypeScript 聯合型別TypeScript型別
- TypeScript 型別保護TypeScript型別
- TypeScript 型別推斷TypeScript型別
- TypeScript 型別斷言TypeScript型別
- TypeScript void 型別TypeScript型別
- TypeScript 陣列型別TypeScript陣列型別
- TypeScript 函式型別TypeScript函式型別
- TypeScript 數值型別TypeScript型別
- TypeScript 布林型別TypeScript型別
- TypeScript Widened型別TypeScriptIDE型別
- TypeScript 對映型別TypeScript型別
- TypeScript 元組型別TypeScript型別
- TypeScript 字面量型別TypeScript型別
- TypeScript資料型別TypeScript資料型別
- TypeScript型別系統和基礎型別TypeScript型別
- TypeScript-----資料型別TypeScript資料型別
- 【譯】TypeScript 的型別(一)TypeScript型別
- TypeScript 字串字面量型別TypeScript字串型別
- TypeScript 混合型別介面TypeScript型別
- TypeScript Null和Undefined 型別TypeScriptNullUndefined型別
- TypeScript(3)基礎型別TypeScript型別
- TypeScript 之對映型別TypeScript型別
- TypeScript 可索引型別介面TypeScript索引型別
- TypeScript 強大的型別別名TypeScript型別
- TypeScript 基本型別和泛型的使用TypeScript型別泛型