-
[TS] 타입 별칭, 인덱스 시그니처TypeScript 2024. 6. 10. 14:19
타입 별칭(Type Alias)
타입 별칭을 이용하면 변수를 선언하듯 타입을 별도로 정의할 수 있습니다.
type User = { id: number; name: string; nickname: string; birth: string; location: string }; let user1: User = { id: 1, name: "정진경", nickname: "ea", birth: "19xx.05.20", location: "마포구", }
인덱스 시그니처(Index Signature)
인덱스 시그니처는 객체 타입을 유연하게 정의할 수 있도록 돕는 특수한 문법입니다.
때로는 객체의 모든 속성 이름을 미리 알지 못하지만 값의 모양은 알고 있는 경우가 있습니다.
type CountryCodes = { Korea: string; UnitedState: string; UnitedKingdom: string; // (... 약 100개의 국가) Brazil : string }; let countryCodes: CountryCodes = { Korea: "ko", UnitedState: "us", UnitedKingdom: "uk", // (... 약 100개의 국가) Brazil : 'bz' };
이런 경우에 인덱스 서명을 사용하여 값의 타입을 설명할 수 있습니다.
type CountryCodes = { [key: string]: string; }; let countryCodes: CountryCodes = { Korea: "ko", UnitedState: "us", UnitedKingdom: "uk", // (... 약 100개의 국가) Brazil : 'bz' };
[key: string]: string
부분이 인덱스 시그니처 문법으로 이 객체의 모든 속성들의key
가string
타입이고value
가string
타입이라는 의미입니다. 위와 같이 인덱스 시그니처 문법을 사용하면 일일이 속성의 중복되는 타입을 명시해 줄 필요 없습니다.만약 인덱스 시그니처 문법 외에 타입을 지니는 속성이 추가 된다면 타입 별칭 부분에 추가해 줄 수 있습니다.
주의할 점은 인덱스 시그니쳐 문법과 함께 사용하는 경우 추가하는 타입 속성의
value
의 타입이 인덱스 시그니처에서 선언한value
의 타입과 동일해야 한다는 것 입니다.type CountryCodes = { [key: string]: string; ManagerId : string; // ✅ 가능 // ManagerId : number; ❌ value의 타입이 string이므로 error가 발생한다. ❌ }; let countryCodes: CountryCodes = { ManagerId : "1" Korea: "ko", UnitedState: "us", UnitedKingdom: "uk", // (... 약 100개의 국가) Brazil : 'bz' };
하지만 인덱스 시그니처 문법을 사용할때
유니온
타입을 사용한다면 속성 값으로 여러 타입을 사용할 수 있습니다.type CountryCodes = { [key: string]: string | number; ManagerId : number; // ✅ 가능 }; let countryCodes: CountryCodes = { ManagerId : 1 Korea: "ko", UnitedState: "us", UnitedKingdom: "uk", // (... 약 100개의 국가) Brazil : 'bz' };
참고 자료
The starting point for learning TypeScript
Find TypeScript starter projects: from Angular to React or Node.js and CLIs.
www.typescriptlang.org
반응형'TypeScript' 카테고리의 다른 글
[TS] Enum(열거형) 타입 (0) 2024.06.29 [TS] 배열 타입 정의 방법, 객체 타입 정의 방법 (1) 2024.06.09 [TS] 원시 타입, 비원시 타입, 리터럴 타입, 타입 어노테이션 (0) 2024.06.09 [TS] 타입별칭과 인터페이스 (0) 2023.07.28