Skip to content

Partial type fails to narrow in spite of check for undefined #29496

Description

The code below works in TS 3.0.

TypeScript Version: 3.2.1.0

Search Terms: is:issue 3.2 Partial

Code

declarefunctionnever(value: never): never;constenumBarEnum{bar1=1,bar2=2,}typeUnionOfBar=TypeBar1|TypeBar2;typeTypeBar1={type: BarEnum.bar1;};typeTypeBar2={type: BarEnum.bar2;};constvalue: Partial<UnionOfBar>={}asany;if(value.type!==undefined){switch(value.type){caseBarEnum.bar1: break;caseBarEnum.bar2: break;default: never(value.type);// Error: Type 'undefined' is not assignable to parameter of type 'never'}}

Expected behavior:
No compiler error

Actual behavior:
Type 'undefined' is not assignable to parameter of type 'never'

Playground Link:
http://www.typescriptlang.org/play/#src=declare%20function%20never(value%3A%20never)%3A%20never%3B%0D%0A%0D%0Aconst%20enum%20BarEnum%20%7B%0D%0A%20%20%20%20%20%20%20%20bar1%20%3D%201%2C%0D%0A%20%20%20%20%20%20%20%20bar2%20%3D%202%2C%0D%0A%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20type%20UnionOfBar%20%3D%20TypeBar1%20%7C%20TypeBar2%3B%0D%0A%0D%0A%20%20%20%20type%20TypeBar1%20%3D%20%7B%0D%0A%0D%0A%20%20%20%20%20%20%20%20type%3A%20BarEnum.bar1%3B%0D%0A%20%20%20%20%7D%3B%0D%0A%0D%0A%20%20%20%20type%20TypeBar2%20%3D%20%7B%0D%0A%0D%0A%20%20%20%20%20%20%20%20type%3A%20BarEnum.bar2%3B%0D%0A%20%20%20%20%7D%3B%0D%0A%0D%0A%20%20%20%20const%20value%3A%20Partial%3CUnionOfBar%3E%20%3D%20%7B%7D%20as%20any%3B%0D%0A%0D%0A%20%20%20%20if%20(value.type%20!%3D%3D%20undefined)%20%7B%0D%0A%0D%0A%20%20%20%20%20%20%20%20switch%20(value.type)%20%7B%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20case%20BarEnum.bar1%3A%20break%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20case%20BarEnum.bar2%3A%20break%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20default%3A%20never(value.type)%3B%20%2F%2F%20Error%3A%20Type%20'undefined'%20is%20not%20assignable%20to%20parameter%20of%20type%20'never'%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%7D

Related Issues:
#28748

Metadata

Metadata

Labels

BugA bug in TypeScriptFixedA PR has been merged for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions