Microsoft/TypeScript

[Regression] Failed to assign to a discriminated union class property when its type is inferred from constructor

Open

#60 394 ouverte le 2 nov. 2024

Voir sur GitHub
 (1 commentaire) (0 réactions) (0 assignés)TypeScript (6 726 forks)batch import
BugDomain: check: Type InferenceHelp Wanted

Métriques du dépôt

Stars
 (48 455 stars)
Métriques de merge PR
 (Merge moyen 6j 17h) (9 PRs mergées en 30 j)

Description

🔎 Search Terms

property infer constructor discriminated

🕗 Version & Regression Information

  • This changed between versions 4.3.5 and 4.4.4 (also in latest)

⏯ Playground Link

https://www.typescriptlang.org/play/?ts=4.4.4#code/C4TwDgpgBAysCGxoF4oG8qkgLigcgCcBXAOxIEsSBzPAGigGdIIATXEogWwCMICoAvlAA+6TOAi48DYAHswkFnkEBuAFBqAxgBt4DBlACCmufzRqolqGALkAbomgzH6q1AD07t1YB6Afg03TVkSGWITWQIACgBKdAtvS2AAC3IGADpnJChUDCxJfBl5RWUhPVgEJFcrAUCrYhIopghWdi5eAjjzRKTUjKyUMXypBopqOkZmFkEEy1qBIA

💻 Code

type State = { type: 'running', speed: number } | { type: 'stopped' };

class Actor {
    private state;
    //       ^? Actor.state: State

    constructor() {
        this.state = { type: 'stopped' } as State;
    }

    run(speed: number) {
        this.state = { type: 'running', speed }
    }
}

🙁 Actual behavior

Type 'string' is not assignable to type '"running" | "stopped"'.(2322)

🙂 Expected behavior

No error, as in 4.3.5.

Additional information about the issue

If the property's type is explicitly declared as private state: State the error is gone.

Guide contributeur