Generic Constraints(型引数の制約、ジェネリック制約) type If<C extends ◯◯> Mapped Types(マップ型、インデックス操作型) { [P in keyof T]: T[P] }; infer(推論) type ElementType<T> = T extends (infer U)[] ? U : never; type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never; declare function PromiseAll<T extends any[]>(values: readonly [...T]): Promise<{ [P in keyof T]: T[P] extends Promise<infer R> | infer R ? R : never }> ちょっと読めるようになったのでは・・・?