Microsoft/TypeScript

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

Open

#60.394 geöffnet am 2. Nov. 2024

Auf GitHub ansehen
 (1 Kommentar) (0 Reaktionen) (0 zugewiesene Personen)TypeScript (6.726 Forks)batch import
BugDomain: check: Type InferenceHelp Wanted

Repository-Metriken

Stars
 (48.455 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 6T 17h) (9 gemergte PRs in 30 T)

Beschreibung

🔎 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.

Contributor Guide