事前生成のPayload型(P)とユーザーが渡す引数(A)から、select結果の型を導出
条件型 `T extends { foo: infer S } ? S : never`パターンで、selectした中身を取る
Mapped Types で型を組み立てる
selectしたキーを Mapped Types のキーとする
キーに対応する値がfalse等の場合はneverにキャストして除外 Mapped Typesのキーを neverにすると丸ごと消える
Mapped Typesの値側を見ていく
Payload型を参照して、selectする値の型を取る
scalarsではなくobjectsの場合も同様に取り、再帰的にselect結果を導出
条件型に当てはまらなければneverに落とすが、最初の型制約で先に落ちるはず