我們可以使用索引存取型別來查詢另一種型別上的特定屬性
tsTry
typePerson = {age : number;name : string;alive : boolean };typeAge =Person ["age"];
索引型別本身是一種型別,因此我們可以使用聯集、keyof
或其他型別
tsTry
typeI1 =Person ["age" | "name"];typeI2 =Person [keyofPerson ];typeAliveOrName = "alive" | "name";typeI3 =Person [AliveOrName ];
如果您嘗試索引不存在的屬性,甚至會看到錯誤
tsTry
typeProperty 'alve' does not exist on type 'Person'.2339Property 'alve' does not exist on type 'Person'.I1 =Person ["alve" ];
使用 number
來取得陣列元素型別的索引的另一個範例。我們可以將它與 typeof
結合使用,以方便擷取陣列文字的元素型別
tsTry
constMyArray = [{name : "Alice",age : 15 },{name : "Bob",age : 23 },{name : "Eve",age : 38 },];typePerson = typeofMyArray [number];typeAge = typeofMyArray [number]["age"];// OrtypeAge2 =Person ["age"];
索引時只能使用型別,這表示您不能使用 const
來建立變數參考
tsTry
constkey = "age";typeType 'key' cannot be used as an index type.Age =Person []; key
'key' refers to a value, but is being used as a type here. Did you mean 'typeof key'?2538
2749Type 'key' cannot be used as an index type.
'key' refers to a value, but is being used as a type here. Did you mean 'typeof key'?
不過,你可以使用類型別名來進行類似的重構
tsTry
typekey = "age";typeAge =Person [key ];