Что означает ключевое слово 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 фактически набирает много тяги в настоящее время, так что, возможно, вы захотите рассмотреть и это. В конце концов, браузеры будут просто изначально поддерживать загрузку модулей.