Ce face strictBindCallApply
call, apply și bind apelează o funcție cu un anumit this și cu argumentele date. Fără opțiune, TypeScript le tratează ca primind orice (any), deci un argument greșit trece. Cu strictBindCallApply, argumentele sunt verificate la fel ca la un apel normal.
Pentru apply, tabloul de argumente este verificat ca un tuplu: număr și tipuri. Pentru bind, funcția obținută primește tipul cu parametrii rămași.
Implicit este false, dar devine true când strict este true.
Parametri
| Parametru | Descriere |
|---|---|
true |
Activează verificarea. |
false |
Dezactivează verificarea, chiar dacă "strict": true. |
(lipsă) |
Ia valoarea lui strict: activă dacă strict este true, altfel inactivă. |
Exemple
Exemplul 1: Argumente greșite prin call, bind și apply
Toate trei apelurile au o greșeală: un text în loc de număr, un boolean în loc de număr și un argument lipsă.
// tsconfig.json
{
"compilerOptions": {
"strictBindCallApply": true,
"target": "es2022"
}
}
// index.ts
function factura(client: string, suma: number) {
return `${client}: ${suma} lei`;
}
console.log(factura.call(undefined, "Ana", "120"));
const pentruIon = factura.bind(undefined, "Ion");
console.log(pentruIon(true));
console.log(factura.apply(undefined, ["Maria"]));
Rezultat (tsc 5.9)
$ npx tsc --noEmit
index.ts(5,44): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
index.ts(7,23): error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'number'.
index.ts(8,38): error TS2345: Argument of type '[string]' is not assignable to parameter of type '[client: string, suma: number]'.
Source has 1 element(s) but target requires 2.
Exemplul 2: Apeluri corecte
Cu argumentele potrivite, codul trece și rulează. Funcția dată de bind mai cere doar suma.
function factura(client: string, suma: number): string {
return `${client}: ${suma} lei`;
}
console.log(factura.call(undefined, "Ana", 120));
const pentruIon = factura.bind(undefined, "Ion");
console.log(pentruIon(75.5));
console.log(factura.apply(undefined, ["Maria", 300]));
Rezultat
Ana: 120 lei
Ion: 75.5 lei
Maria: 300 lei
Greșeli frecvente
- Să folosești
applycu un tablou de tipstring[]pentru o funcție cu parametri fixi. Tabloul trebuie să fie un tuplu (de exemplu scris direct sau cuas const). - În cod nou,
call/applysunt rareori necesare: apelul direct sau operatorul spread (f(...args)) sunt mai clare.
Comenzi înrudite
strict: Pornește dintr-o singură mișcare toate verificările stricte de tipuri (strictNullChecks, noImplicitAny și celelalte).strictFunctionTypes: Verifică corect parametrii când atribui o funcție altui tip de funcție (fără bivarianță la parametri).noImplicitThis: Dă eroare când this este folosit într-o funcție unde tipul lui nu se știe (ar fi any).