Skip to content

?? and ??= behave differently when they shouldn't #40359

@trajafri

Description

@trajafri

TypeScript Version: 4.0.2, Nightly (2020-9-2)

Search Terms:
Nullish coalescing operator
Nullish never
Coalescing never
Nullish coalescing assignment

Code
According to this post usage of ?? and ??= should be equivalent in the sample code below:

const values: { a?: string[] } = { };

delete values.a;
(values.a ?? (values.a = [])).push("hello"); // error
values.a = undefined;
(values.a ?? (values.a = [])).push("hello"); // error

delete values.a;
(values.a ??= []).push("hello");
values.a = undefined;
(values.a ??= []).push("hello");

Expected behavior:
Examples with ?? and ??= should compile and behave similarly.

Actual behavior:
Examples with ?? do not compile (Argument of type 'string' is not assignable to parameter of type 'never'.(2345))

Playground Link:
link

Related Issues:
Didn't find anything similar

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptDomain: check: Control FlowThe issue relates to control flow analysisEffort: ModerateRequires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual".Help WantedYou can do this

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions