less than 1 minute read

学んだこと

デフォルトの型パラメータを指定する方法

// ジェネリクスを定義時にデフォルトの型を指定することができる
interface ResponseData<T = any>{
  data: T;
  status: number;
}

let tmp: ResponseData;

型の for 文である MappedTypes について

  • ある型のキーを使って新しい型を生成する機能
    • プロパティすべてをオプショナル型にしたいときに使う
// readonlyをつけるとすべてのプロパティが読み取り専用になる
type MappedTypes = {
  [P in "aaaa" | "bbbb"]: string
}

// 下のように解釈される
type MappedTypes = {
  aaaa: string;
  bbbb: string
}

型の if 文である CondetionalTypes

  • 構文は以下の通り
      • type ConditionalTypesInfer = { tomato: "tomato" } extends { tomato: infer R } ? R : boolean;
      • 簡単にすると以下となる
      • A extends B ? C : D
        • A: { tomato: “tomato” }
        • B: { tomato: infer R }
        • C: R(“tomato”と推論される)
        • D: boolean
      • ConditionalTypesInfer には”tomato”が入る
// tomatoがstring型に代入できるか判断する
// trueであればnumber型、falseであればboolean型になる
type ConditionalTypes = "tomato" extends string ? number : boolean

// tomato
type ConditionalTypesInfer = {tomato: "tomato"} extends {tomato: infer R} ? R : boolean

// "tomato"と"pumpkin"を別々に"tomato"に入るか確認し、型を推測する
// 推測すると、numberとbooleanのユニオン型になる
type DistributiveConditionalTypes<T> = T extends "tomato" ? number : boolean;
let tmp : DistributiveConditionalTypes<"tomato" | "pumpkin">