Open
Description
TypeScript Version: 4.0.2
Search Terms: discriminated union, error messages
Code
type Action = {
type: 'action1';
payload: {
property1: string;
};
} | {
type: 'action1';
payload: {
property2: number;
};
} | {
type: 'action2';
payload: {
property3: boolean;
};
}
const action: Action = { // Actual error is here
type: 'action1',
payload: {
property3: true // Expected error here
}
}
Expected behavior:
Expected error at action.payload.property3
declaration, perhaps something like:
Object literal may only specify known properties, and 'property3' does not exist in type '{ property1: string; } | { property2: number; }'.
Also, once the object has been refined by the type action1
, intellisense should only provide property1
and property2
as a suggestion when declaring the payload
.
Actual behavior:
An error message at the first line of the declaration:
Type '{ type: "action1"; payload: { property3: true; }; }' is not assignable to type 'Action'.
Type '{ type: "action1"; payload: { property3: true; }; }' is not assignable to type '{ type: "action2"; payload: { property3: boolean; }; }'.o
Type '"action1"' is not assignable to type '"action2"'.(2322)
Also, once the object has been refined by the type action1
, intellisense still provides property3
as a suggestion when declaring the payload
.