Принудительно печатать при использовании связывания - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь создать связанную версию функции с предварительно установленными аргументами, однако я не могу получить какие-либо проверки типов для метода bind.

Вот мой код:

interface I {
  a: string;
  b: string;
}

function doSomethingWithValue(value: I) {
  // Do something
}

const ivalue: I = { a: 'a', b: 'b' };

// No error as expected.
doSomethingWithValue(ivalue);

//"Argument of type '"a"' is not assignable to parameter of type 'I'" as expected.
doSomethingWithValue('a');

// No error. Not what I expected
const bound = doSomethingWithValue.bind(null, 'a');

// Will fail
bound();

Похоже, что в настоящее время подпись TypeScript для bind равна

bind(this: Function, thisArg: any, ...argArray: any[]): any;

Можно ли как-нибудь заставить проверки типов работать правильно с bind?

Я пытался создать index.d.ts, но я застрял на том, как объявить параметры функции как универсальные.

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Существует опция компилятора в 3.2 и новее, называемая strictBindCallApply документированная здесь . Вы также можете просто включить strict, что также позволяет strictBindCallApply

Если эта опция активна, вы получите сообщение об ошибке:

const bound = doSomethingWithValue.bind(null, 'a');
0 голосов
/ 20 марта 2019

Вы можете посмотреть на https://github.com/Microsoft/TypeScript/issues/212

Кажется, что даже MS не знает, как сделать привязку, вызов и применение строго типизированных

...