Typescript(18)
-
[Nest.js] class validator 관련 tip
개요 class validator관련 tip들을 정리해보려고 한다. 기본 type checking에 대해서는 잘 활용할꺼라서 여러가지 변형에 대한 케이스들을 적어보려고 한다. 이외에도 class validator에서는 다양한 기능들을 제공하므로 문서를 참조해보자 1. ValidateIf 특수한 decorator라 별도로 추가했다. 해당 validation을 진행할지 여부를 별도로 조건을 설정 가능하다. 예를 들어서 아래와 같이 public한 feed에 대해서 반드시 tag입력이 필요할 경우 아래와 같이 설정할 수 있다. export class FeedRequest { @IsOptional() @IsBoolean() isPublic?: boolean; @ValidateIf((r) => r.isPublic ..
2023.02.14 -
[Typescript] typescript 연습하기
개요 typescript를 쓰다보면 실제로 효율적으로 쓰고 있는지 의심이 들 때가 있다. 이를 연습해볼 수 있는 곳이 있는데, type-challenges라는 repo에서 실제로 연습을 해볼 수 있다. 예제 아래는 몇가지 예제를 link를 걸어두었다. Pick ReadOnly 위의 문제들을 풀다보면 typescript의 다른 방식에 대해 애를 먹을 수 있는데, 이 특징과 몇가지 typescript의 문법들을 보면서 문제를 풀기전에 개념을 잡아보려고 한다. typescript 특징 type programming이다. 일단 기본적으로 typescript는 javascript의 runtime 동작을 모델링 하는 언어입니다. 따라서 실제 runtime에서는 type들이 제거되고 javascript로 실행된다. ..
2022.07.17 -
[RXJS] Hot Observable vs Cold Observable
개요 Hot 생성자의 경우에는 하나의 생성자에서 여러개의 구독자가 붙을 수 있다. ( anycast ) Cold의 경우 생성자는 구독할 때마다 각각의 타임라인에서 생성된다. ( unicast ) Hot의 경우 구독을 하더라도, 처리가 이루어지지 않을 수 있다. 기본적으로 Observable은 Cold이다. 따라서 Hot으로 변경하기 위해서는 Connectable Observable/Flowable로의 변환이 필요하다. (아니면 쉽게 subject를 통해 구현이 가능하다.) Cold Observable vs Hot Observable 비교 Hot Cold 데이터 배출 구독하지 않아도 계속 배출 구독하지 않으면 배출하지 않음 example 마우스 이벤트, 키보드 이벤트, 시스템 이벤트 웹 요청, 데이터 베이..
2022.07.10 -
[RXJS] from vs of 차이
개요 from 과 of의 차이를 알아보자. from 먼저 공식 문서를 보면 다음과 같다. Creates an Observable from an Array, an array-like object, a Promise, an iterable object, or an Observable-like object. array 또는 array-like object를 observable로 전환해준다. from([1,2,3]) .forEach(item => console.log(`case 1: ${item}`)); // case 1: 1, case 1: 2, case 1: 3 Promise또는 observable like object를 변환해준다. function promisify(item: T): Promise { re..
2022.06.27 -
[RxJS] bufferCount 써보기
개요 stream으로 값을 불러오는 경우 여러개의 값을 bulk로 처리하고 싶을 때가 있다. 이 때 bufferCount를 통해서 여러값을 처리하도록 만들어 보자. 예제 test generator를 생성한다. const sleep = async function (ms: number): Promise { return new Promise(resolve => { setTimeout(resolve, ms); }); } const doBackground = async (count: number, subscriber: Subscriber) => { for (let i = 0; i < count; i++) { if (count % 4 == 0) { await sleep(10); }; subscriber.next(i..
2022.05.08 -
[RxJS] Promise.all 대신 mergeMap 써보기
개요 여러 async 함수를 동시에 수행해서 결과를 만들고 싶을 때, Promise.all()을 사용한다. 이 때 Promise.all에서 많은 함수가 동시에 call이 되는 것을 막고 싶을 때가 있다. 이를 편리하게 구현할 수 있게 RxJS에서는 mergeMap을 제공한다. 예제 준비코드 아래와 같이 일정 시간 delay후 종료되는 task함수를 만들자. const sleep = async function (ms: number): Promise { return new Promise(resolve => { setTimeout(resolve, ms); }); } const task = async function (id: string): Promise { console.log(id, new Date()); ..
2022.05.08