타입의 특정 프로퍼티를 찾기 위해서 인덱싱된 접근 타입 을 사용할 수 있습니다.
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.'key' refers to a value, but is being used as a type here. Did you mean 'typeof key'?2538Age =Person []; key
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 ];