Avatar
type _CCC<T> = T extends infer U & { foo: null } ? U : never; type CCC = _CCC<AAA>; function useCCC(ccc: CCC) { useString(ccc); } こうやってinferを使えば剥がせますが、逆にConditional Typeに依存することでTがまたunionやintersectionだったりしてUとの間に綺麗な継承関係を作れなかった場合に崩壊したりとか。