// ジェネリクスを定義時にデフォルトの型を指定することができる
interface ResponseData<T = any>{
data: T;
status: number;
}
let tmp: ResponseData;
// readonlyをつけるとすべてのプロパティが読み取り専用になる
type MappedTypes = {
[P in "aaaa" | "bbbb"]: string
}
// 下のように解釈される
type MappedTypes = {
aaaa: string;
bbbb: string
}
// 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">