2016-02-23 10 views
7

Recentemente ho studiato ES6 e questo mi ha portato a usare Babel molto. Essendo il tipo curioso, ho iniziato a guardare il repository Babel Github per sapere come hanno costruito questo fantastico strumento e sapere se posso in qualche modo contribuire.Esiste una parola chiave `declare` in ES6/7?

Tuttavia, mi sono imbattuto in this file, e ha scritto cose come declare class BabelNodeSourceLocation {} e il file termina con .js.

Questo mi ha fatto diventare molto confuso, e ora mi chiedo se c'è una parola chiave in JavaScript che non conoscevo, o è solo una sintassi specifica di Babele? Tutte le mie ricerche su Google non hanno generato nulla.

Aggiornamento: Inserire il codice nel Babel REPL non ha generato nulla. Babel ha semplicemente ignorato il codice e non ha prodotto alcuna uscita ES5 equivalente. Inoltre non ha generato alcun errore.

+1

Interessante. Penso che sia dattiloscritto. Non sono sicuro del motivo per cui ha l'estensione '.js'. – Jacob

risposta

6

e il file termina con .js.

Ciò non significa molto in questi giorni :-)

mi chiedo se c'è una parola chiave declare in JavaScript che non sapevo di

No, non ci non è.

O è solo una sintassi specifica di Babele?

No. È un type declaration file per il tipografo Flow.

+0

Suppongo che sia piuttosto Flow. –

+0

@FelixKling: hai ragione. Non è un suffisso '.dts ':-) – Bergi

+0

Dal [repository Babel] (https://github.com/babel/babel/blob/master/scripts/generate-interfaces.js): _" aggiungi script per generare un file di flusso lib per tipi babel "_ – zeroflagL

1

Con Flow, è possibile dichiarare una classe globale che consente di fare riferimento al tipo di classe in qualsiasi punto del progetto. Questo non ha alcun effetto sul codice runtime e non influenzerà l'output babel.

Un esempio dal the docs:

declare class URL { 
    constructor(urlStr: string): URL; 
    toString(): string; 

    static compare(url1: URL, url2: URL): boolean; 
}; 

E poi nel progetto è possibile fare riferimento URL, un tipo di classe.

Analogamente, è possibile dichiarare altri tipi, moduli, funzioni, variabili globali. Un buon modo per tenerli organizzati.