有時候我們在寫代碼時,會有根據(jù)傳入的值來轉(zhuǎn)換成對應(yīng)的數(shù)據(jù)這種情況,比如:
const TYPE = {
'white': '#FFF',
'black': '#000'
}
// 調(diào)用:
let colors = ['white', 'black'];
colors.map(item => <span style={{ color: `${TYPE[item]}`}}>文字顏色</span>)
像這種根據(jù)對象的key值來取對應(yīng)的值,在ts里,如果key值類型多樣,也會用枚舉之類的來處理,但是直接[變量]這種形式來取,會ts類型檢驗報錯。

image.png
因為enum枚舉類型里的key不是單純的string,number這種類型,枚舉的 key 是 string literal 類型。這個時候我們可以用keyof來取出枚舉里的所有key值作為type。
type TYPES = keyof typeof TYPE;

image.png
keyof是ts的索引類型操作符,屬于ts的高級類型。
對于任何類型T,keyof T得到的類型是T的屬性名稱字符串字面量類型構(gòu)成的聯(lián)合類型。
它同樣可以用于獲取interface接口定義的屬性名稱。
interface Person {
name: string;
age: number;
sex: string;
}
type Persons = keyof Person;