studye / typescript

타입스크립트는 자바스크립트랑 다른 언어인가요?
7 stars 0 forks source link

[typescript - 2.3] Async Iteration #44

Open sangwook-kim opened 7 years ago

sangwook-kim commented 7 years ago

Async iterators

interface AsyncIterator<T> {
  next(value?: any): Promise<IteratorResult<T>>;
  return?(value?: any): Promise<IteratorResult<T>>;
  throw?(e?: any): Promise<IteratorResult<T>>;
}

일반 Iterator와 달리 IteratorResultPromise를 반환하는 메소드들을 제공하는 것이 차이점. AsyncIterator 객체를 반환하는 Symbol. asyncIterator 메서드를 가지고 있으면 Iterable 하다 할 수 있다.

Async Generator

비동기 방식의 Generator. yield* 호출을 사용.

async function* g() {
  yield 1;
  await sleep(100);
  yield* [2, 3];
  yield* (async function *() {
    await sleep(100);
    yield 4;
  })();
}

일반 Generator와 마찬가지로 Async GeneratorsArrow function으로 만들 수 없다.

for-await-of

비동기 Iterator와 generator에대해서 for...of에 해당하는 for...await...of 문이 도입됨.

Generic parameter defaults

Generic에 심지어 default 인자를 사용할 수 있게 됨.

declare function create(): Container<HTMLDivElement, HTMLDivElement[]>;
declare function create<T extends HTMLElement>(element: T): Container<T, T[]>;
declare function create<T extends HTMLElement, U extends HTMLElement>(element: T, children: U[]): Container<T, U[]>;

위의 내용을 default인자를 사용하면

declare function create<T extends HTMLElement = HTMLDivElement, U = T[]>(element?: T, children?: U): Container<T, U>;

와 같이 쓸 수 있음. 이러한 Genericdefault 인자는 다음의 규칙을 따른다.