typescript - TSLint egalitate dublă vs triplă
Știu că un singur semn de egalitate înseamnă atribuire; dublu înseamnă egalitate; iar triplu înseamnă egalitate și același tip.
Ceea ce nu înțeleg este de ce linter-ul TypeScript ar vrea să folosesc semne de egalitate triple în acest caz:
function gcf(a: number, b: number): number
{
return (b == 0) ? (a) : (gcf(b, a % b));
}
TsLint: == ar trebui să fie ===
Știu că 0 este un număr și știu, de asemenea, că b este un număr (altfel voi primi o eroare de compilare). Deci de ce aș vrea să folosesc semnele de egalitate triple în acest caz?
Răspuns #1
Tipurile nu te pot salva de la toate erorile cauzate de ==. În special deoarece undefined și null sunt compatibile cu toate tipurile. De exemplu, următorul if este incorect:
var foo:number = null;
if (foo == undefined) {
console.log('is undefined'); // actually null
}
Pentru mai multe informații despre motivul pentru care acestea sunt egale https://stackoverflow.com/a/359509/95190
Personal : Am avut această regulă dezactivată și nu am avut niciodată probleme. Nu compar cu true/false/null/undefined, doar if lor. Și TypeScript împiedică compararea stringurilor cu numere, așa că aceasta nu este o eroare cu care trebuie să mă ocup.
Răspunsul #2
Folosirea operatorului de egalitate triplă te salvează, de asemenea, în cazurile în care JavaScript-ul rezultat poate fi apelat dintr-un fișier extern (adică în afara mediului TypeScript). Fișierele JS pure nu sunt procesate de tslint, iar prin „cererea” egalității triple, tslint face fișierul JavaScript rezultat puțin mai rezistent.
