[230610] TypeScript 공식문서 (Narrowing)
1. TypeScript 오프라인 스터디
- 오프라인 스터디 3시간 진행
- 준비한 내용을 발표했다.
2. TypeScript Narrowing 정독 완료
- 공식문서 Narrowing 부분 정독 완료
- 학습 페이지 - 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이 추가 됐다면 컴파일 단계에서 오류 발생한다.
Leave a comment