반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- TCP
- BFS
- javascript
- type challenge
- 그래프
- HTTP
- Algorithm
- 타입 챌린지
- 레벨 1
- Nestjs
- HTTP 완벽 가이드
- 소켓
- Node.js
- 크롤링
- 자바스크립트
- ip
- 프로그래머스 레벨 2
- 가천대
- typescript
- dp
- 수학
- 쉬운 문제
- 타입스크립트
- Crawling
- 백준
- dfs
- 문자열
- socket
- 알고리즘
- 프로그래머스
Archives
- Today
- Total
kakasoo
한 가지 인스턴스로만 이루어진 순수한 배열로 타입을 확정하기 본문
반응형
여러 가지 엔티티의 칼럼이나 프로퍼티를 통일시켜, 하나의 함수를 여러 엔티티가 공유할 수 있게 작성하고 싶다. 그렇지만, 파라미터로 오는 타입들이 다른 경우, 이렇게 만드는 게 쉽지 않다. 이런 경우에는 직접 커스텀한 함수로 타입을 보호해줄 수 있는 방법이 필요하다.
public format(value: Foo[] | Bar[]) {
const isFooArray = isArrayOf(isInstanceOf(Foo));
if (isFooArray(value)) {
// true block
for (const foo of value) {
const f: Foo = foo; // okay
}
} else {
// false block
for (const bar of value) {
const b: Bar = bar; // okay
}
}
}
이처럼, Foo와 Boo로만 이루어진 두 배열 중 어느 한 쪽이 들어오는지를 체크하는, isFooArray 조건을 정의해 사용할 수 있다. 이 조건은 Foo의 인스턴스로 이루어진 배열인지 체크하는, 두 함수의 합성으로 이루어진다.
const isArrayOf = <T>(elemGuard: (x: any) => x is T) =>
(arr: any[]): arr is Array<T> => arr.every(elemGuard);
const isInstanceOf = <T>(ctor: new (...args: any) => T) =>
(x: any): x is T => x instanceof ctor;
반응형
'프로그래밍 > NestJS' 카테고리의 다른 글
한 NestJS 서버에서 여러 Strategy 구현하기 (0) | 2022.07.17 |
---|---|
비동기로 동작하는 Guard 인증 만들기 (0) | 2022.07.17 |
Nest.js POST 메서드에서의 Redirect ( GET이 아닌 메서드에서의 ) (0) | 2022.06.19 |
TypeORM, 집계함수(sum, count)와 orderBy 사용하기 (0) | 2022.06.18 |
CannotExecuteNotConnectedError & medata was not found (0) | 2022.06.14 |