microsoft / microsoft/TypeScript
Error "'this' implicitly has type 'any'" when used .bind()
Open
Nobody has claimed this yet.
Awaiting More Feedback
Domain: JavaScript
Suggestion
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
› tsc --version
Version 2.7.0-dev.20171020
Code
tsconfig.json:
{
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"noEmit": true,
"strict": true
},
"files": [
"index.d.ts",
"index.js"
]
}
index.js:
/** @type {MyObj} */
const o = {
foo: function() {
(function() {
console.log(this); // <- Unexpected error here.
}.bind(this))();
}
};
index.d.ts:
interface MyObj {
foo(this: { a: number }): void;
}
How it looks in the editor:
Context of foo() is defined:

But context passed to the nested function is lost:

Expected behavior:
There should not be error, because this explicitly specified by .bind().
Actual behavior:
› tsc
index.js(5,25): error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.
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
Start by reproducing the diagnostic with the provided tsconfig.json, index.js, and index.d.ts using the reported tsc setup. Trace how JavaScript checking resolves this for the nested function and .bind(this); done means the example no longer reports TS2683 while related behavior remains covered by tests.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100