strictBindCallApply
call, apply i bind dostają prawdziwe sygnatury
Bez niej ta trójka przyjmuje dowolne argumenty, bo ich zadeklarowane typy mówią `any[]`.
- Od
- TypeScript 3.2
- strict
- W strict
- W twoim tsconfigu
"strictBindCallApply": true- Skompilowane z
"strict": true
Ten sam fragment za każdym razem. Zmieniła się tylko opcja.
Z wyłączoną
"strictBindCallApply": falsefunction greet(name: string) { return name } export const wrong = greet.call(undefined, 42)
Kompiluje się czysto
Z włączoną
"strictBindCallApply": truefunction greet(name: string) { return name } export const wrong = greet.call(undefined, 42)
Zgłasza TS2345
Dlaczego kompilator się tym przejmuje
Tej kontroli nie dało się wyrazić, dopóki nie pojawiły się wariadyczne krotki, więc biblioteka standardowa zadeklarowała te metody z `any[]` i każde wywołanie przez nie było niesprawdzane. To dziwna dziura w skądinąd surowym buildzie: ten sam błąd zapisany jako bezpośrednie wywołanie jest łapany, a zapisany przez `.call` już nie. Flaga podstawia sygnatury generyczne, które wykonują arytmetykę na krotce parametrów.
Wniosek
Skoro sprawdzają to wariadyczne krotki, kompilator zbyt stary na nie sprawdzić tego nie umie.
Gdzie iść dalej
Opcji: 22

