Closed
Description
Bug Report
🔎 Multiple objects intersection
🕗 5.1.3 and 5.1.6
⏯ Playground Link
Playground link with relevant code
💻 Code
type a = { a: string };
type b = { b: number };
type c = { a: number };
type d = { a: boolean };
type ComputeIntersection<O> = { [k in keyof O]: O[k] };
type test1 = ComputeIntersection<a & b>;
// test1 => { a: string ; b:number} That's what I expected
type test2 = ComputeIntersection<a & c>;
// test2 => { a: never } ,That's what I expected. just like: test2 = { a: string & number }
type test3 = ComputeIntersection<a & c & d>;
// test3 = > never . This puzzles me,According to test2, test3 is supposed to be "{ a: string & number & boolean}" The result is still "{ a:never }"
// Replace a & c with test2 .
type test4 = ComputeIntersection< test2 & d>;
// test4 => { a : never }. How do we understand this!
🙁 Actual behavior
type test3 = ComputeIntersection<a & c & d>;
// test3 => never
🙂 Expected behavior
type test3 = ComputeIntersection<a & c & d>;
// test3 = { a: never }