TypeScriptの型定義

TypeScriptの型定義がすごい進化しているな。

type Props = {
  name: string,
  [key: string]: any
};

type Props2 = {
  name: string,
} & {
  [key in string]: any
};

JavaScriptのcomputed property names と Mapped types もある。使えるぞ。

次の型表現は期待通りの意味。

 {a:string, [key : string]:any}

だが、{} が Object と同義なのはどうもよくない。{[key : string]:never} はプロパティを持てない。通常の書き方だとクローズドモデルになる。

 {a:string, b:number}// closed

interfaceとは違う。次は使える。

type Foo = [boolean, (number|null)?, ...Array<string>];