repeat, TypeScript Narrowing,
Post

repeat, TypeScript Narrowing,

String.prototype.repeat()

  • 문자를 반복해서 새로운 문자열을 반환
    '안녕'.repeat(3); //안녕안녕안녕
    

TypeScript Narrowing

  • 타입을 좁혀 주어 더 안정적으로 코드를 체크할 수 있도록 하는 방법 공식 문서에 다음과 같은 예제가 있다.
function padLeft(padding: number | string, input: string) {
  return " ".repeat(padding) + input;
}

위 코드에서 repeat 안에 있는 padding은 다음과 같은 타입 에러가 발생한다.

‘string | number’ 형식의 인수는 ‘number’ 형식의 매개 변수에 할당될 수 없습니다. ‘string’ 형식은 ‘number’ 형식에 할당할 수 없습니다.ts(2345)

paddingnumberstring유니언 타입으로 선언되었기 때문에 될 것 같지만, repeat안의 padding은 항상 number만 와야 하기 때문에 에러가 발생하는 것이다. 따라서 아래 코드와 같이 타입을 좁혀주면 에러가 발생하지 않는다.

function padLeft(padding: number | string, input: string) {
  if (typeof padding === "number") {
    return " ".repeat(padding) + input;
  }
  return padding + input;
}

typeof를 사용해서 paddingnumber일 때만 " ".repeat(padding) + input을 리턴하게 하면 paddingnumber타입으로 정의되고 그 이후에 나오는 padding + input부분의 타입은 string으로 정의된다.

typeof로 type 지키기

  • typeof가 리턴값으로 가질 수 있는 타입
    • “string”
    • “number”
    • “bigint”
    • “boolean”
    • “symbol”
    • “undefined”
    • “object”
    • “function”