Microsoft/TypeScript
View on GitHub?? and ??= behave differently when they shouldn't
Open
#40,359 opened on Sep 2, 2020
BugDomain: check: Control FlowEffort: ModerateHelp Wanted
Repository metrics
- Stars
- (48,455 stars)
- PR merge metrics
- (Avg merge 6d 17h) (9 merged PRs in 30d)
Description
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