关于 Exclude 返回?

为何这样 可以排除 U 里的类型 MyExclude<'1' | '2', '2'> 可以正常 返回 '1'

type MyExclude<T, U> = T extends U ? never : T;

为何这样就不生效了呢

type ObjectExclude<T, K extends keyof T> = T[K] extends Object ? K : never;
interface s {
    a: {};
    d: {};
}
// ObjectExclude<s> 可以正常返回 a | d
interface s {
    a: {};
    d: {};
    f: string;
}
// ObjectExclude<s> 为何这样就返回了 never 呢?
阅读 1.3k
1 个回答

这样可以解决 但是不清楚 为啥 加了 K extends any 就可以 不太理解 extends

type ObjectExclude<T, K extends keyof T = keyof T> = K extends any ? (T[K] extends object ? K : never) : never;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进