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>];