Что означает ключевое слово module в typescript?
Я пытаюсь понять некоторые вещи, связанные с ES6 модулей. Как использовать пространства имен вместе с angular и typescript.
предположим, что следующий код представляет собой угловую директиву. Кто-нибудь знает, что module
ключевое слово означает и как вы можете получить доступ к MyClass в другом файле.
// file1.ts
module NSpace.Space {
export class MyClass {
constructor() { ... }
...
}
}
Я попытался получить доступ к другому файлу, используя и реэкспортируя, однако
// file2.ts
import {MyClass} from 'file1';
export {MyClass}
я получаю эту ошибку: ошибка TS2306: файл ' файл.ТС не модуль
мои вопросы:
- почему я получаю это?
- что это
module
ключевое слово? - мы создаем модули ES6 только на основе структуры каталогов или можем
мы действительно используем эту запись?
module Space.Space1.Space2 ...
из того, что я прочитал и испытал до сих пор, кажется, что модули ES6 определены на основе файловой структуры, поэтому я получаю эту ошибку.
Я не написал этот код, вот почему я спрашиваю. Также может быть полезно упомянуть, что я использую систему.JS для импорта.
1 ответов
на module
ключевое слово в TypeScript вызвало небольшую путаницу, поэтому оно будет переименовано namespace
.
вместо того, чтобы использовать пространства имен, вы можете организовать свой код по файлам / файловой системе (что означает, что фактическое местоположение файла будет соответствовать воспринимаемому пространству имен. Вот как работают" внешние модули " (TypeScript), а также как работают модули ECMAScript 2015.
таким образом, с быстрой настройкой, вы будете иметь:
// file1.ts
export class MyClass {
constructor() { ... }
...
}
и тогда это будет работа:
import {MyClass} from 'file1';
если вы компилируете таргетинг ES6, вы заметите, что эта строка кода не нуждается в переводе, она соответствует стандарту для импорта модулей. Если вы нацелены на ES5 или ниже, TypeScript преобразует этот оператор для вас (вы можете выбрать преобразование с помощью --module
флаг.
Я обычно использую опцию компиляции UMD, что означает, что вывод будет работать в веб-браузерах (с RequireJS) или на узле. Система JS фактически набирает много тяги в настоящее время, так что, возможно, вы захотите рассмотреть и это. В конце концов, браузеры будут просто изначально поддерживать загрузку модулей.