TypeScript (Intersection Types、 Mapped Types)
へぇと思ったので紹介
Interscetion Types
両方引き継ぐことができる
でorができるんだから、&も当然っちゃ当然か |
interface IHoge { hoge(): void } interface IFuga { fuga(): void } // Intersection Types type IHogeFuga = IHoge & IFuga let hogefuga: IHogeFuga = undefined;
Mapped Types
// 全てのプロパティをreadonlyにする type ReadOnly<T> = { readonly [k in keyof T]: T[k]; } // 全てのプロパティを任意項目にする type Optional<T> = { [k in keyof T]?: T[k]; } // 全てのプロパティをnull許容する type Nullable<T> = { [k in keyof T]: T[k] | null; } // テキトーなinterfaceを用意する interface ITodo { id: number; content: string; isCompleted: boolean } // ITodoに充てる type ReadOnlyTodo = ReadOnly<ITodo> type OptionalTodo = Optional<ITodo> type NullableTodo = Nullable<ITodo> // 全てのプロパティがreadonly const todo1: ReadOnlyTodo = { id: 1, // strictNullChecksががtrueならならnullを使えない content: 'content', isCompleted: false } // 全てのプロパティを任意項目だからこれでエラー出ない const todo2: OptionalTodo = {} // 全てのプロパティをnull許容にする const todo3: NullableTodo = { id: null, content: null, isCompleted: null }
2冊目がわかりやすいよ
1冊目は出版社がよくセールしてる印象ある