Skip to content

Wrong assignability of class types from expressions with private fields Β #56146

@dragomirtitian

Description

@dragomirtitian

πŸ”Ž Search Terms

class expression private fields assignability

πŸ•— Version & Regression Information

  • This is the behavior in every version I tried

⏯ Playground Link

Playground Link

πŸ’» Code

function makeClass(v: number) {
    return class C{
        #id = v;
        static getId(o: C) {
            return o.#id;
        }
    }
}

const cls1 = makeClass(1)
const cls2 = makeClass(2)

let c1 = new cls2(); // TS thinks this is ok
cls1.getId(c1) // runtime error different versions of #id

πŸ™ Actual behavior

c2 is assignable to c1 even though they contain private fields that are different (even if they come from the same source code)

πŸ™‚ Expected behavior

Instances of cls2 should not be assignable to cls1 since they have different versions of the private field.

Additional information about the issue

Found as I was exploring the consequences of #56145

Metadata

Metadata

Assignees

No one assigned

    Labels

    Design LimitationConstraints of the existing architecture prevent this from being fixed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions