2016-02-23 2 views
7

Недавно я изучал ES6, и это привело к тому, что я использовал Вавилон много. Будучи любопытным типом, я начал смотреть репозиторий Babel Github, чтобы узнать, как они построили этот потрясающий инструмент, и знаю, могу ли я как-то внести свой вклад.Есть ли ключевое слово `declare` в ES6/7?

Однако я наткнулся на this file, и на нем написано все, как declare class BabelNodeSourceLocation {}, и файл заканчивается на .js.

Это меня очень смутило, и теперь мне интересно, есть ли ключевое слово declare в JavaScript, о котором я не знал, или это просто синтаксис, специфичный для Babel? Все мои поисковые запросы Google ни к чему.

Обновление: Ввод кода в Babel REPL не привел ни к чему. Бабель просто проигнорировал код и не выдал эквивалентного выхода ES5. Это также не произвело никакой ошибки.

+1

Интересно. Я считаю, что это машинопись. Не знаю, почему у него расширение '.js'. – Jacob

ответ

6

и файл заканчивается .js.

Это не значит, много в эти дни :-)

Я задаюсь вопросом, есть ли declare ключевое слово в JavaScript, что я не знаю

Нет, не является.

Или это просто специфический для Вавилона синтаксис?

№ Это type declaration file для типа Flowechecker.

+0

Я предполагаю, что это скорее поток. –

+0

@FelixKling: Вы правы. Это не суффикс '.d.ts' :-) – Bergi

+0

Из [Babel repository] (https://github.com/babel/babel/blob/master/scripts/generate-interfaces.js): _" добавить скрипт для генерации файла потока lib для типов бабелей "_ – zeroflagL

1

С помощью Flow вы можете объявить глобальный класс, который позволяет ссылаться на тип класса в любом месте вашего проекта. Это не влияет на код времени выполнения и не влияет на вывод бабуля.

Пример из the docs:

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

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

И тогда в вашем проекте вы можете ссылаться на URL как тип класса.

Аналогичным образом вы можете объявить другие глобальные типы, модули, функции, переменные. Хороший способ держать их организованными.

Смежные вопросы