microsoft / microsoft/TypeScript
Unhelpful `--strictFunctionTypes` error when first method is `self(): this;`
Open
Nobody has claimed this yet.
Domain: Error Messages
In Discussion
Suggestion
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
TypeScript Version: 2.7.0-dev.20171214
Code
declare class C<T> {
self(): this;
covariant(): T;
contravariant: (t: T) => void;
m(other: C<{}>): void;
}
new C<number>().m(new C<number>());
Expected behavior:
Error that C<number> isn't C<{}> because C<{}>'s contravariant can accept (t: {}) but C<number> can only accept (t: number).
Actual behavior:
src/a.ts(8,19): error TS2345: Argument of type 'C<number>' is not assignable to parameter of type 'C<{}>'.
Types of property 'self' are incompatible.
Type '() => C<number>' is not assignable to type '() => C<{}>'.
Type 'C<number>' is not assignable to type 'C<{}>'.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the issue with the TypeScript snippet in the report using --strictFunctionTypes and compare the diagnostic with the stated expected behavior. Trace the type comparison triggered by the first self(): this method, and consider the issue complete when the error identifies the contravariant property incompatibility instead.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100