TypeScript 索引型別
索引型別查詢操作符 keyof 可以獲取運算元的可訪問索引字串字面量型別。
關於keyof可以參閱TypeScript keyof 用法一章節。
程式碼例項如下:
[typescript] 純文字檢視 複製程式碼interface Antzone{ webName:string; age:number; address:string; } let type:keyof Antzone;
返回值是已存在的公共屬性名構成的字串聯合型別,截圖如下:
這時候,字串索引就形成字串字面量型別,並且這些字面量型別組合成一個聯合型別。
關於字串字面量型別可以參閱TypeScript 字串字面量型別一章節。
使用索引型別,編譯器就可以檢查使用動態屬性名的程式碼。
程式碼例項如下:
[typescript] 純文字檢視 複製程式碼function func(obj, names) { return names.map(name =>obj[name]); }
上面程式碼可以返回物件屬性子集的屬性值陣列。
在TypeScript通過索引型別查詢和索引訪問操作符實現類似功能。
程式碼如下:
[typescript] 純文字檢視 複製程式碼interface Antzone{ webName:string; age:number; address:string; } function func<T, K extends keyof T>(obj: T, names: K[]): T[K][] { return names.map(name => obj[name]); } let antzone: Antzone = { webName: '螞蟻部落', age: 5, address:"青島市南區" }; let strings = func(antzone, ['webName','age']);
使用keyof T可以動態獲取索引型別,也就是如果介面新增一個屬性,它會實時獲取。
於是可以很方便的檢查是否傳遞了正確的屬性名給函式。
程式碼例項如下:
[typescript] 純文字檢視 複製程式碼let strings = func(antzone, ['webName','target']);
程式碼報錯,因為並沒有target屬性;實現此判定利用了泛型限定,具體參閱TypeScript 泛型限定一章節。
函式的返回值型別是T[K]型別陣列,關於T[K]索引訪問操作符參閱TypeScript keyof 用法一章節後半部分。
看如下程式碼例項,以加深對T[K]的理解:
[typescript] 純文字檢視 複製程式碼interface Antzone{ webName:string; age:number; address:string; } let antzone: Antzone = { webName: '螞蟻部落', age: 5, address:"青島市南區" }; type tp=Antzone["webName"]; let webName=antzone["webName"];
上面程式碼中,T是介面Antzone,K是字串索引,如"webNmae",返回值是對應屬性的資料型別,也就是antzone物件的webName屬性值的資料型別。
相關文章
- TypeScript this型別TypeScript型別
- TypeScript 泛型型別TypeScript泛型型別
- TypeScript 官方手冊翻譯計劃【八】:型別操控-按索引訪問的型別TypeScript型別索引
- TypeScript 型別安全TypeScript型別
- TypeScript 型別相容TypeScript型別
- TypeScript 交叉型別TypeScript型別
- Typescript:基本型別TypeScript型別
- TypeScript void 型別TypeScript型別
- TypeScript 字串型別TypeScript字串型別
- TypeScript Widened型別TypeScriptIDE型別
- TypeScript Never型別TypeScript型別
- TypeScript Any型別TypeScript型別
- TypeScript type 型別別名TypeScript型別
- TypeScript 字面量型別TypeScript型別
- TypeScript資料型別TypeScript資料型別
- TypeScript 型別系統TypeScript型別
- TypeScript 型別推斷TypeScript型別
- TypeScript 型別保護TypeScript型別
- TypeScript 型別斷言TypeScript型別
- TypeScript 聯合型別TypeScript型別
- TypeScript 數值型別TypeScript型別
- TypeScript 布林型別TypeScript型別
- Typescript高階型別TypeScript型別
- TypeScript 陣列型別TypeScript陣列型別
- TypeScript 對映型別TypeScript型別
- TypeScript 函式型別TypeScript函式型別
- TypeScript型別系統和基礎型別TypeScript型別
- typeScript 型別斷言、聯合型別和交叉型別(七)TypeScript型別
- MySQL索引的型別MySql索引型別
- typeScript 基礎型別 (三)TypeScript型別
- TypeScript(3)基礎型別TypeScript型別
- TypeScript-----資料型別TypeScript資料型別
- TypeScript 之對映型別TypeScript型別
- TypeScript 字串字面量型別TypeScript字串型別
- 【譯】TypeScript 的型別(一)TypeScript型別
- TypeScript 混合型別介面TypeScript型別
- TypeScript Null和Undefined 型別TypeScriptNullUndefined型別
- TypeScript 強大的型別別名TypeScript型別