일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- LeetCode
- til
- Async
- 프로그래머스
- 타임어택
- 렛츠기릿 자바스크립트
- python
- 알고리즘
- 회고
- 리덕스
- 타입스크립트
- 자바스크립트
- 타입스크립트 올인원
- codestates
- 백준
- 제로초
- 정재남
- 손에 익히며 배우는 네트워크 첫걸음
- 코드스테이츠
- 리트코드
- 토익
- javascript
- js
- SQL 고득점 Kit
- 2주 프로젝트
- 파이썬
- programmers
- 리액트
- 코어 자바스크립트
- 4주 프로젝트
Archives
- Today
- Total
Jerry
[TIL] [타임어택9기][리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편 - (8) : 커스텀 타입 가드(is, 형식 조건자) 본문
Front/Typescript
[TIL] [타임어택9기][리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편 - (8) : 커스텀 타입 가드(is, 형식 조건자)
juicyjerry 2024. 2. 29. 00:45반응형
커스텀 타입 가드(is, 형식 조건자)
타입을 구분해주는 커스텀 함수를 직접 만들 수 있다.
리턴값에 is가 들어가 있는 타입은 커스텀 타입 가드 함수이다.
if문 안에 써서 정확한 타입을 타입스크립트에게 알려줘야 함
그리고 is가 아니면 타입 추론이 안 되는 경우도 있다.
interface Cat { meow: number }
interface Dog { bow: number }
function catOrDog(a: Cat | Dog): a is Dog {
// 타입 판별을 여러분이 직접 만드세요.
if ((a as Cat).meow) { return false }
return true;
}
const cat: Cat | Dog = { meow: 3 }
if (catOrDog(cat)) { // 커스텀한 타입 가드
console.log(cat.meow);
}
if ('meow' in cat) {
console.log(cat.meow);
}
실질 예제
Promise가 실행하고 나면 pending에서 seltteld가 된다 (완료지 성공:resolve 혹은 실패:reject가 아님)
promises.then().catch() // 둘다 settled다, 그 중 then만을 resolved, catch를 rejected라고 부르는 것
PromiseFulfilledResult에는 PromiseSettledResult PromiseSettledResult
const isRejected = (input: PromiseSettledResult<unknown>): input is PromiseRejectedResult => {
return input.status === 'rejected';
}
const isFulfilled = <T>(input: PromiseSettledResult<T>): input is PromiseFulfilledResult<T> => {
return input.status === 'fulfilled';
}
const promises = await Promise.allSettled([Promise.resolve('a'), Promise.resolve('b')]);
실패한 것만 필터하고 싶을 경우
const errors = promises.filter(isRejected);
const errors = promises.filter((promise) => promise.status === 'rejected');
위 errors의 promise가 settled가 아닌 rejected가 되게 하고 싶은데 바보 타입스크립트는 넓게 타입 추론해서 캐치하지 못하고 있다. -> 이 때, isReject 구문을 활용
const errors = promises.filter(isRejected); // reject로 바뀜
성공한 것만 필터하고 싶을 경우
const errors = promises.filter(isFulfilled);
export{};
반응형