Today I Learned_230131

2 분 소요

  • string과 String은 다름. 소문자로 하는 것 기억하기.
const a: string = 'hello';
const b: String = 'hell';

대문자로 하면 지옥이 펼쳐진다..

String과 string은 다르다. String은 래퍼 객체에 해당. 스크린샷 2023-01-31 오후 8.29.04.png

String은 new String();에서만 사용

대문자 쓰지 말자.

  • 템플릿 리터럴 타입이 존재(유니언 등 사용 가능)
  • type키워드를 통해 타입을 커스텀하게 만들 수 있다.
  • const에서도 백틱을 쓸 수 있지만 type에서도 백틱을 쓸 수 있다.
type World = "world" | "hell";

// type Greeting = "hello world"
type Greeting = `hello ${World}`;

또는을 사용하면 타입 추천을 정교하게 만들 수 있다.

스크린샷 2023-01-31 오후 8.36.27.png

  • hello world, hello hell 둘 중 하나만 선택할 수 있다.

  • 배열, 튜플 문법

let arr: string[] = [];
let arr2: Array<string> = [];
function rest(...args: string[]) {} //function rest(...args) {} 와 같이 줄일 수 있음

const tuple: [string, number] = ['1', 1];
tuple[2] = 'hello'; //에러남. 2자리밖에 없는데 세번째 자리에 넣으니까 에러
tuple.push('hello'); //근데 타입스크립트는 바보라서 얘는 된다.
// 둘 다 세번째에 요소를 추가하는 요소이다
//rest pamareter
function rest(...args: string[]) {
    console.log(args); //[1, 2, 3]
}
rest('1', '2', '3');

function rest(a, ...args: string[]) { //여기서 a는 any타입
    console.log(args); //1, [2, 3]
}
rest('1', '2', '3')
  • enum, keyof, typeof
  • enum은 변수들을 하나의 그룹으로 묶고싶을 때 사용
    • enum : javascript로 변환 시 남아있지 않는다.
    • 스크린샷 2023-01-31 오후 8.52.52.pngimage
    • 객체 : javascript로 변환 시 남아있는다.
    • image
    • 남겨야 할지 안 남겨야 할지 모르겠다면 일단 객체로 만들어서 남기자.
const enum EDirection {
  Up,     //0
  Down,   //1
  Left,   //2
  Right,  //3
}
//첫 값을 지정할 수 있음. Up을 3으로 지정해주면 3, 4, 5, 6이 된다.
//3, 5, 4, 6과 같이 불규칙적으로도 할 수 있다.
//enum은 문자열도 가능
const enum EDirection {
    Up = '123',
    Down = 'hello',
    Left = 'wow',
    Right = 'enum',
}

//enum이 아닌 객체를 사용
const ODirection = {
  Up: 0,
  Down: 1,
  Left: 2,
  Right: 3,
} as const;

EDirection.Up;
           
(enum member) EDirection.Up = 0
 
ODirection.Up;
           
(property) Up: 0
 
// enum은 직접 타입으로 쓸 수 있음. dir은 4개중에 하나여야 한다.
function walk(dir: EDirection) {}
 
// enum 쓰기 싫을 땐 아래처럼 쓰면 된다.
type Direction = typeof ODirection[keyof typeof ODirection];
function run(dir: Direction) {}

//4개 중 하나의 방향을 입력
walk(EDirection.Left);
run(ODirection.Right);
  • as const
    • 있을 때 : 정확하게 타입 추론

      스크린샷 2023-01-31 오후 8.55.39.png

    • 없을 때 : 정확하게 타입 추론을 하지 않음

      스크린샷 2023-01-31 오후 8.55.21.png

    • 타입스크립트가 바보가 되면 우리가 나서야 함

      • as const를 붙이거나 - 이 속성들을 전부 상수로 사용하겠다. 고정된 값으로 엄격한 타이핑 진행
      • 뒤에 타입을 붙여줄 수 있음
        const ODirection: {Up: 0, Down:1, Left:2, Right:3} = {
            Up: 0,
            Down: 1,
            Left: 2,
            Right: 3,
        };
              
        const ODirection = {
          Up: 0,
          Down: 1,
          Left: 2,
          Right: 3,
        } as const;
      
  • keyof, typeof

    스크린샷 2023-01-31 오후 9.01.31.png

    • obj의 a, b, c를 가져다 쓰고 싶음
    • 그런데 쓸라고 하니까 obj는 값이 아닌 타입이라고 한다 → typeof 필요
      const obj = {a: '123', b: 'hello', c:'world'};
      type Key = keyof typeof obj;
    
    • typeof : 값을 타입으로 사용하고 싶을 때

      스크린샷 2023-01-31 오후 9.03.06.png

    • 여기서 키들만 뽑아내고 싶을 때 keyof 사용

      스크린샷 2023-01-31 오후 9.03.39.png

    • as const와 typeof를 활용하면 이렇게 사용할 수 있음 → 값들만 뽑아내고 싶을 때 enum처럼 사용할 수 있다.

      스크린샷 2023-01-31 오후 9.06.39.png

카테고리:

업데이트: