객체 설정
타스에서 객체 → interface
Array에서 객체로 변경
1const CARD_NUMBER_INPUT_NAMES = ['first', 'second', 'third', 'four'] as const;
2// *1
3
4type Numbers = typeof CARD_NUMBER_INPUT_NAMES[number]
5// *2
*1 : const는 literal 그 자체를 타입으로 지정한다. const a = 1에서 a의 타입은 1 그 자체가 되고 1이외에 다른 값이 들어갈 수 없다. const의 특성을 잘살린 타입추론
*2: Array타입을 union 타입으로 변환한다. 번호가 매겨진 index에 해당하는 값들을 가져오기 때문에 number를 사용한다.
mapping
1type Number = {
2 [K in typeof CARD_NUMBER_INPUT_NAMES[number]]: string;
3 // [ ]: type -> mapped type
4 // K(아무 문자) in union type
5};
6
7// Record utility type
8type Number3 = Record<typeof CARD_NUMBER_INPUT_NAMES[number], string>;
9
10// 똑같은거다.
11interface Number2 {
12 first: number;
13 second: number;
14 third: number;
15 fourth: number;
16}
mapped type은 interface로 안된다. type에서만 가능하다.
generic
1type Field<T extends string> = {
2 [K in T]: string;
3};
4
5type ExpiredDate = Field<typeof EXPIRED_DATE_INPUT_NAMES[number]>;