Przejdź do treści
webtype.orgwebtype.orgtsconfig

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    tsconfig

    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": false
    function greet(name: string) {
      return name
    }
    
    export const wrong = greet.call(undefined, 42)

    Kompiluje się czysto

    Z włączoną

    "strictBindCallApply": true
    function 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