別の型の特定のプロパティを検索するには、インデックス付きアクセス型を使用できます。
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 ];