Open
Description
TypeScript Version: 2.0 Beta
Code
// A *self-contained* demonstration of the problem follows...
interface Foo {
method(value: 'aa'): void;
method(value: 'bb'): void;
method(value: 'zz'): void;
method(value: 'last'): void;
}
const x: Foo = {} as any;
x.method('bar'); // Error line
Expected behavior:
A more meaningful error message, e.g.
Argument of type "'bar'" is not assignable to parameter of type "'aa' | 'bb'|...|'last'"
Actual behavior:
Argument of type "'bar'" is not assignable to parameter of type "'last'"
I am finding this error message confusing, because the compiler picks the value of the last overload in order to report the error, and there is nothing special about the last value.
Metadata
Metadata
Assignees
Labels
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
DanielRosenwasser commentedon Aug 8, 2016
I've rated this at moderate difficulty because overload resolution isn't the simplest part of the compiler.
For what it's worth, I don't think the suggested error message is the best because it implies you could actually pass in a value of type
"aa" | "bb" | ... | "last"
, but that's not the case.Also see @sandersn's issue at #6541.