Skip to content

Wrong union type matching #15907

Description

TypeScript Version: 2.3.2

Code

typeAction={type: 'activate'}|{type: 'disactivate'};functiondispatchAction(action: Action): void{}constactive=true;dispatchAction({type : (active? 'disactivate' : 'activate')});

Expected behavior:
Everything is correct. And if I change last line to:

dispatchAction(active? {type : 'disactivate'} : {type : 'activate'});

then no errors will be produced.

Actual behavior:
Error:
Argument of type '{ type: "activate" | "disactivate"; }' is not assignable to parameter of type 'Action'.
Type '{ type: "activate" | "disactivate"; }' is not assignable to type '{ type: "disactivate"; }'.
Types of property 'type' are incompatible.
Type '"activate" | "disactivate"' is not assignable to type '"disactivate"'.
Type '"activate"' is not assignable to type '"disactivate"'.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Working as IntendedThe behavior described is the intended behavior; this is not a bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions