Skip to content

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

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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions