Skip to content

Intersection with mapped never type allows incompatible optional assignments #19927

Closed
@kpdonn

Description

@kpdonn

TypeScript Version: 2.7.0-dev.20171110

Code

declare const a:  {z: string} & {[K in never]: string} 
const b: {z?: number} = a

Expected behavior:
Compile error on the second line because {z?: number} is incompatible with {z: string}

Actual behavior:
No Error

Obviously the code above is nonsensical but I spun this out of a special case in #19869 since that one ended up being about generic function inferences and I realized this is something different.

Some more code examples that make me think my example should have a compile error:

declare const a2: {z: string} & {[K in never]: string}
const b2: {z: number} = a2 
// TS2322: Type '{ z: string; } & {}' is not assignable to type '{ z: number; }'.

declare const a3: {z: string} & {}
const b3: {z?: number} = a3 
// TS2322: Type '{ z: string; }' is not assignable to type '{ z?: number | undefined; }'.

declare const a4: {z: string, y: string} & {[K in never]: string}
const b4: {z?: number, y: string} = a4 
// TS2322: Type '{ z: string; y: string; } & {}' is not assignable to type '{ z?: number | undefined; y: string; }'.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScript

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions