We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
@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
The text was updated successfully, but these errors were encountered:
@RyanCavanaugh Can you confirm and fix this clear bug you merged?
Sorry, something went wrong.
weswigham
No branches or pull requests
@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
The text was updated successfully, but these errors were encountered: