わいの日記

ありがちエンジニアブログ

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;

f:id:exhikkii:20190430234809p:plain
予測でhogeメソッドとfugaメソッドが表示されている

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冊目は出版社がよくセールしてる印象ある

https://amzn.to/2GJrPrFamzn.to

https://amzn.to/2DEyK4Jamzn.to