type 별칭, index signature

백아름·2023년 7월 10일
0

프론트엔드

목록 보기
60/80

type 별칭

  • 동일한 타입을 정의해줄 때는 타입만 따로 빼서 정의가능함.
  • function scope 안에 type이 똑같이 정의된 경우에는 전역 글로벌 scope의 type과 별개로 정의됨.

index signature

  • 규칙을 위반하지만 않으면 오류가 뜨지 않음.
    // 따라서 빈 객체를 넣어도 위반하지 않은 것이라 오류가 뜨지 않음.
    // 그래서 위와 같은 경우를 조심해야함. (위반하지 않은 경우에 오류가 뜨지 않기 때문)
    // 반드시 입력해야하는 값이 있다면 Korea: number; 이런 식으로 적어줘야함.

  • index signature를 사용한 경우
    [key: string]: number;

  • index signature를 썼던 경우에는 위의 value 타입은 일치시켜주어야 함.
    Korea: number;

// 타입 별칭 -> 타입도 겹쳐서 사용하면 안되지만, 전역말고 스코프 내에서는 다른 범주로 지정될 수 있음.

type User = {
  id: number;
  name: string;
  nickname: string;
  birth: string;
  bio: string;
  location: string;
};

function func() {
  type User = {}; //위의 User와는 다르게 적용됨( 스코프 내에서는 다른 범주로 지정될 수 있음.)
}

let user: User = {
  id: 1,
  name: "이정환",
  nickname: "winterlood",
  birth: "1997.01.07",
  bio: "안녕하세요",
  location: "부천시",
};

let user2: User = {
  id: 2,
  name: "홍길동",
  nickname: "winterlood",
  birth: "1997.01.07",
  bio: "안녕하세요",
  location: "부천시",
};

// 인덱스 시그니처 -> 규칙을 위반하지만 않으면 오류가 뜨지 않음.
// 따라서 빈 객체를 넣어도 위반하지 않은 것이라 오류가 뜨지 않음.
// 그래서 위와 같은 경우를 조심해야함. (위반하지 않은 경우에 오류가 뜨지 않기 때문)
// 반드시 입력해야하는 값이 있다면 Korea: number; 이런 식으로 적어줘야함.

type CountryCodes = {
  [key: string]: string;
};

let countryCodes: CountryCodes = {
  Korea: "ko",
  Unitedstate: "us",
  UnitedKingdom: "uk",
};

type CountryNumberCodes = {
  [key: string]: number; //index signature를 사용한 경우
  Korea: number; // index signature를 썼던 경우에는 위의 value 타입은 일치시켜주어야 함.
};

let countryNumberCodes: CountryNumberCodes = {
  Korea: 410,
  UnitedState: 840,
  UnitedKingdom: 826,
};
profile
곧 훌륭해질 거에요!

0개의 댓글

관련 채용 정보