[230610] TypeScript 공식문서 (Narrowing)

1. TypeScript 오프라인 스터디

  • 오프라인 스터디 3시간 진행
  • 준비한 내용을 발표했다.

2. TypeScript Narrowing 정독 완료

Truthiness narrowing

  • TS는 조건문에서 변수의 값의 진위성을 확인하여 변수의 타입을 좁히는 기능을 말함
  • js 기반 truthy와 falsy 개념을 기반으로함
functiongetUsersOnlineMessage(numUsersOnline: number) {
if (numUsersOnline) {
return `There are ${numUsersOnline} online now!`;
  }
return "Nobody's here. :(";
}

const usersOnlineMessage = getUsersOnlineMessage(0)
console.log(usersOnlineMessage)
// Nobody's here. :(

할당

let x = Math.random() < 0.5 ? 100 : "안녕!";

x = 1;
console.log(x);

x = "반가워";
console.log(x);

x = true; // 'boolean' 형식은 'string | number' 형식에 할당할 수 없습니다.console.log(x)

타입 단언 사용

const isNumber = (value: string | number): value is number => {
returntypeof value === 'number'
  }

functionmultiply(a: string | number, b: string | number):number |string {
if (isNumber(a) && isNumber(b)) {
return a * b
    }else {
return '잘못된 입력입니다.'
   }
 }

식별 가능한 유니온

interface UserAccount {
  type: 'user';
  name: string;
  point: number;
}

interface AdminAccount {
  type: 'admin';
  name: string;
  level: number;
}

type Account = UserAccount | AdminAccount;

const getAccountInfo = (account: Account) => {
if (account.type === 'user') {
// account가 UserAccount 타입으로 추론되므로 사용자 정보에 접근할 수 있다.return `${account.name}님의 사용자 정보 - 누적포인트: ${account.point}점`;
  }elseif (account.type === 'admin') {
return `${account.name}님의 어드민 정보 - 어드민 레벨: ${account.level}`;
  }
}

the never type

  • never 은 절대로 발생하지 않을 값을 나타냄
interface Circle {
  kind: "circle";
  radius: number;
}

interface Square {
  kind: "square";
  sideLength: number;
}

type Shape = Circle | Square;

functiongetArea(shape: Shape) {
switch (shape.kind) {
case "circle":
return Math.PI * shape.radius ** 2;
case "square":
return shape.sideLength ** 2;
default:
const exhaustiveCheck: never = shape;
return exhaustiveCheck;
  }
}
  • 여기서 새로 triangle type이 추가 됐다면 컴파일 단계에서 오류 발생한다.

Categories:

Updated:

Leave a comment