Finally TypeScript 3.2 officially supports this feature!!!
See: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-2.html#strictbindcallapply
Function.prototype.bind with typings for TypeScript
Function#bind
is untyped in TypeScript (in v3.0 at least, cf: #212).
It always returns any
.
function foo(a: number, b: number): string {
return `${this.msg}: ${a + b}`;
}
// bar is `any`!
const bar = foo.bind({msg: 'hello'}, 10);
// ok
bar(20); // 'hello: 30'
// should be a type error, but actually allowed...
bar('anything');
bind.ts
is a workaround for this issue.
import bind from 'bind.ts';
// bar is `(b: number) => string`
const bar = bind(foo, {msg: 'hello'}, 10);
// ok
bar(20); // 'hello: 30'
// error!
bar('anything');
Note: TypeScript v3.0 introduces generic rest parameters. It's helpful but cannot solve this issue completely and the type definition of Function#bind
in TypeScript core is not changed.
bind.ts v2 requires TypeScript v3.0+. For TypeScript v2.x, use bind.ts v1.
The maximum number of params of bind()
is 5.
MIT License: Teppei Sato <teppeis@gmail.com>