typescript - call() returnerar inte rätt typ


Jag har följande typescript:

let fn = function (): boolean {
    return true
}

let res1: number

res1 = fn.call(null) // Should error

Jag borde inte tillåtas att tilldela res1 eftersom det deklareras som number och resultatet av fn.call() skulle vara boolean. Kontrollera i playgrounden.

Det här var ett problem men det blev fixat, så gör jag något fel?

Svar #1

Det finns ett speciellt kompileringsalternativ (som inte är tillgängligt i lekplatsen) som gör att call och bind och apply bevarar korrekt typ.

Alternativet är strictBindCallApply och du kan läsa om det här:

Aktivera striktare kontroll av bind-, call- och apply-metoderna på funktioner.

Med detta alternativ inställt på true kommer din kod att ge ett fel som förväntat.

Svar #2

Ganska konstigt. Alternativt kan du direkt kalla på funktionen med fn() och det kommer att ge kompilationsfel.

let fn = function (): boolean {
    return true
}

let res1: number
res1 = fn() // Will definitely result in error.

Relaterade artiklar