有時候我們在寫代碼時膨报,會有根據(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;