한 입 크기로 잘라먹는 타입스크립트 - 타입 별칭과 인덱스 시그니처
- src/chapter4.ts
// 타입 별칭 : 타입을 변수처럼 정의해서 사용
// 2명의 변수로 페이지가 꽉찰 뿐만 아니라, 타입 정의 코드가 중복된다.
let user: {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string;
} = {
id: 1
, name: '송진성'
, nickname: 'Jint'
, birth: '1994.05.05'
, bio: '안녕하세요'
, location: '연신내'
};
let user2: {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string;
} = {
id: 2
, name: '홍길동'
, nickname: 'Hong'
, birth: '1894.05.05'
, bio: '안녕하세요'
, location: '고양시'
};
// 별칭으로 만든 User 타입 생성 - 공통적으로 type을 적용해야 할 때
// 코드 중복 제거
type User = {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string;
// extra: string; // User 타입을 사용하는 객체들에 일괄 적용
};
// 타입 어노테이션으로 객체 타입 리터럴을 일일이 다 작성할 필요 없다.
// 타입 별칭 명시
let user3: User = {
id: 1
, name: '송진성'
, nickname: 'Jint'
, birth: '1994.05.05'
, bio: '안녕하세요'
, location: '연신내'
};
let user4: User = {
id: 2
, name: '홍길동'
, nickname: 'Hong'
, birth: '1894.05.05'
, bio: '안녕하세요'
, location: '고양시'
};
// 타입 별칭 사용시 주의사항
// 1. 같은 스코프 내에서 동일한 이름 사용하지 않기 (중복X)
function func() { // 다른 스코프라 가능
type User = {};
}
타입스크립트 타입 관련 코드들은 컴파일 결과 자바스크립트 코드에선 제거되는데, 타입 별칭으로 만든 타입들도 제거되는지 확인한다.
- Terminal
tsc
컴파일 후 자바스크립트 파일을 확인한다.
- dist/chapter4.js
// 타입 별칭 : 타입을 변수처럼 정의해서 사용
// 2명의 변수로 페이지가 꽉찰 뿐만 아니라, 타입 정의 코드가 중복된다.
let user = {
id: 1,
name: '송진성',
nickname: 'Jint',
birth: '1994.05.05',
bio: '안녕하세요',
location: '연신내'
};
let user2 = {
id: 2,
name: '홍길동',
nickname: 'Hong',
birth: '1894.05.05',
bio: '안녕하세요',
location: '고양시'
};
// 타입 어노테이션으로 객체 타입 리터럴을 일일이 다 작성할 필요 없다.
// 타입 별칭 명시
let user3 = {
id: 1,
name: '송진성',
nickname: 'Jint',
birth: '1994.05.05',
bio: '안녕하세요',
location: '연신내'
};
let user4 = {
id: 2,
name: '홍길동',
nickname: 'Hong',
birth: '1894.05.05',
bio: '안녕하세요',
location: '고양시'
};
// 타입 별칭 사용시 주의사항
// 1. 같은 스코프 내에서 동일한 이름 사용하지 않기 (중복X)
function func() {
}
export {};
타입 별칭 정의가 다 사라진 것을 확인할 수 있다.
- src/chapter4.ts
...
// 인덱스 시그니처 : 객체 타입의 정의를 더 유연하게 하도록 도와줌
// 즉, key 와 value 의 규칙을 기준으로 객체의 타입을 정의할 수 있는 문법이다.
/*
type CountryCodes = {
Korea: string;
UnitedState: string;
UnitedKingdom: string;
// 200개가 더 추가되려면 끔찍하다.
};
*/
type CountryCodes = {
[key: string]: string;
};
let countryCodes: CountryCodes = {
Korea: 'ko'
, UnitedState: 'us'
, UnitedKingdom: 'uk'
};
// 인덱스 시그니처 활용2
type CountryNumberCodes = {
[key: string]: number;
}
let countryNumberCodes: CountryNumberCodes = {
Korea: 410
, UnitedState: 840
, UnitedKingdom: 826
};
// 인덱스 시그니처 사용시 주의사항
type CountryNumberCodes2 = {
[key: string]: number;
Korea: number; // 반드시 포함해야 하는 항목 추가
// Korea: string; // 항목 추가시, 인덱스 시그니처의 value 타입과 일치하거나 호환해야 된다.
}
// 타입 오류 발생X : 인덱스 시그니처 타입은 규칙을 위반하지만 않으면 모든 객체를 허용.
// let countryNumberCodes2: CountryNumberCodes2 = {};
// 해결 방법 : 인덱스 시그니처에 반드시 포함해야 하는 항목 추가
let countryNumberCodes3: CountryNumberCodes2 = {
Korea: 410
};
한 입 크기로 잘라먹는 타입스크립트(TypeScript) 강의 | 이정환 Winterlood - 인프런
이정환 Winterlood | 문법을 넘어 동작 원리와 개념 이해까지 배워도 배워도 헷갈리는 타입스크립트 이제 제대로 배워보세요! 여러분을 타입스크립트 마법사🧙🏻♀️로 만들어드립니다., 프론
www.inflearn.com
'강의 실습 > 한 입 크기로 잘라먹는 타입스크립트(TypeScript)' 카테고리의 다른 글
Any와 Unknown (1) | 2024.07.28 |
---|---|
Enum 타입 (0) | 2024.07.27 |
객체 (0) | 2024.07.24 |
배열과 튜플 (1) | 2024.07.23 |
원시타입과 리터럴타입 (6) | 2024.07.22 |
댓글