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.