javascript - Varför måste jag ange typen för vanliga "const"-variabler men inte för "const"-variabler som definieras i "for"-loopar?


Även om TypeScript kan härleda typerna för vissa värden, kräver alla TypeScript const-variabler en typdefinition:

const x: string = "Hello World!";

När du tar bort typdefinitionen:

const x = "Hello World!";

Du får ett fel som ser ut ungefär så här:

Så naturligtvis antog jag att samma gällde för const-variabler definierade i for-loopar.

Problemet är att när jag försökte det fick jag detta fel:

fel TS2483: Vänstersidan av en 'for...of'-sats kan inte använda en typannotering.

för (const [series_namn, series_data]: [string, SeriesObject] av Object.entries(SERIES)) {                  ~~~~~~~~~~~~~~~~~~~~

Kan någon förklara varför detta inte är tillåtet?

OBS: den här frågan handlar endast om const-variabler, inte om let-variabler.

Svar #1

Jag antar att du använder TSLint för att lint-a din kod.

Typescript kräver inte att du anger en typ för const-variabler, men regeln typedef i TSLint gör det. Du kommer att kunna kompilera din kod utan typen, och typen för variabeln kommer att vara Hello World, eftersom den deklareras med const. Den kommer att kunna tilldelas till string.

Men TypeScript stöder inte att sätta en typ i en for-loop. Hur som helst skulle det vara överflödigt eftersom vi redan vet typen av arrayen som ska loopas igenom.

Om du inte vill tvingas ange en typ på dina variabler, stäng bara av alternativet "variable-declaration" i typedef-regeln i TSLint.

Relaterade artiklar