Skip to content

Computation of intersection of multiple objects #54903

Closed
@missannil

Description

@missannil

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 }

Metadata

Metadata

Assignees

No one assigned

    Labels

    Working as IntendedThe behavior described is the intended behavior; this is not a bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions