fn.call(thisArg, ...args), fn.apply(thisArg, args) and fn.bind(thisArg, ...args) call a function indirectly. Without strictBindCallApply, TypeScript accepts any arguments there; with it, they are checked against the function's parameters, exactly as a direct call would be.
It is part of strict and arrived with TypeScript 3.2.
At a glance
| Write | Leave it to strict; write "strictBindCallApply": false only to turn this one check back off |
|---|---|
| On the command line | --strictBindCallApply |
| Type | boolean |
| Default in TypeScript 5.9 | false (on when strict is on) |
| Default from TypeScript 6.0 | true, through strict (TypeScript 6.0) |
| TypeScript's description | Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. |
The description is quoted from TypeScript's own option list (Apache-2.0); see the notices.
Examples
/** @param {string} name */
function greet(name) {
return `Hello, ${name.trim()}`;
}
console.log(greet.call(undefined, "Ada"));
console.log(greet.call(undefined, 42));error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'.jsconfig.json for this example
{
"compilerOptions": {
"checkJs": true,
"noEmit": true,
"strict": true,
"target": "es2022",
"module": "nodenext",
"types": []
},
"include": [
"*.js"
]
} /** @param {string} name */
function greet(name) {
return `Hello, ${name.trim()}`;
}
console.log(greet.call(undefined, "Ada"));
console.log(greet.call(undefined, 42));jsconfig.json for this example
{
"compilerOptions": {
"checkJs": true,
"noEmit": true,
"strict": true,
"target": "es2022",
"module": "nodenext",
"types": [],
"strictBindCallApply": false
},
"include": [
"*.js"
]
} Where it shows up in JavaScript
Older JavaScript leans on these methods: borrowing array methods with Array.prototype.slice.call(arguments), binding event handlers with this.onClick.bind(this), and apply to spread an array of arguments. With the option on, each of those calls is checked, and bind returns a function with the remaining parameters typed.
Gotchas
- The first argument,
thisArg, is checked against a@thistype when the function has one; see@this.
Sources
- TSConfig Reference: strictBindCallApply · TypeScript
- TypeScript 3.2 release notes · TypeScript handbook
Last reviewed 20 October 2026.