Open falsandtru opened 5 years ago
@RyanCavanaugh @weswigham @ahejlsberg Caused by #27697
TypeScript Version: 3.4.0-dev.20190222
Search Terms:
Code
type Falsy = undefined | false | 0 | '' | null | void; type TEq<T, U> = [T] extends [U] ? [U] extends [T] ? true : false : false; type If<S, T, U> = S extends Falsy ? U : T; type StrictExtract<T, U> = T extends U ? U extends T ? T : never : never; type StrictExclude<T, U> = T extends StrictExtract<T, U> ? never : T; type ExcludeProp<T, V> = { [Q in { [P in keyof T]: If<TEq<V, never>, T[P] extends never ? never : P, If<Includes<T[P], V>, never, P>>; }[keyof T]]: T[Q]; }; type DeepExcludeProp<T, V, E extends object | undefined | null = never> = T extends E ? T : T extends V ? never : T extends readonly any[] | Function ? T : T extends object ? ExcludeProp<{ [Q in { [P in keyof T]: If<TEq<V, never>, T[P] extends never ? P : P, If<Includes<T[P], V>, T[P] extends E ? P : never, P>>; }[keyof T]]: StrictExclude<DeepExcludeProp<T[Q], V, E>, {}>; }, never> : T; type Includes<T, U> = true extends (T extends U ? true : never) ? true : false; type AD = { a: boolean; b: { a: boolean; b: boolean[]; c: undefined; d: undefined[]; e: boolean | undefined; f: Array<boolean | undefined>; }; c: { a: undefined; }; }; type a = DeepExcludeProp<AD, undefined, AD['b']>; type b = ExcludeProp<AD, AD['c']>; type c = { a: boolean; b: { a: boolean; b: boolean[]; c: undefined; d: undefined[]; e: boolean | undefined; f: Array<boolean | undefined>; }; }; type d = TEq<a, c>; type e = TEq<b, c>; type f = TEq<a, b>;
Expected behavior:
type d = TEq<a, c>; // true type e = TEq<b, c>; // true type f = TEq<a, b>; // true
Actual behavior:
type d = TEq<a, c>; // true type e = TEq<b, c>; // true type f = TEq<a, b>; // false
Playground Link:
Related Issues: #30047
@RyanCavanaugh Can you confirm and fix this clear bug you merged?
@RyanCavanaugh @weswigham @ahejlsberg Caused by #27697
TypeScript Version: 3.4.0-dev.20190222
Search Terms:
Code
Expected behavior:
Actual behavior:
Playground Link:
Related Issues: #30047