Я использую машинопись 1.6 с синтаксисом модулей es6.
Мои файлы:
test.ts:
module App {
export class SomeClass {
getName(): string {
return 'name';
}
}
}
main.ts:
import App from './test';
var a = new App.SomeClass();
Когда я пытаюсь скомпилировать main.ts
файл, я получаю такую ошибку:
Ошибка TS2306: Файл test.ts не является модулем.
Как я могу этого добиться?
javascript
typescript
ecmascript-6
Bazinga
источник
источник
Ответы:
Расширенный - для предоставления дополнительных сведений на основе некоторых комментариев.
Ошибка
Исходя из факта, описанного здесь http://exploringjs.com/es6/ch_modules.html
Исходя из вышеизложенного, нам нужен файл
export
как часть файла test.js. Давайте настроим его содержимое следующим образом:И теперь мы можем импортировать его тремя способами:
И мы можем потреблять импортированные вещи вот так:
и вызовите метод, чтобы увидеть его в действии:
Исходная часть пытается помочь уменьшить сложность использования пространства имен
Оригинальная часть:
Я действительно настоятельно рекомендую проверить эти вопросы и ответы:
Как использовать пространства имен с внешними модулями TypeScript?
Приведу первое предложение:
В этом случае нам просто не нужно
module
внутриtest.ts
. Это может быть изменено его содержаниеtest.ts
:Подробнее здесь
Экспорт =
позже мы можем использовать это так:
Подробнее здесь:
Загрузка дополнительных модулей и другие сценарии расширенной загрузки
источник
Вышеуказанные ответы верны. Но на всякий случай ... Та же ошибка в VS Code. Пришлось повторно сохранить / перекомпилировать файл, который выдавал ошибку.
источник
Как я могу этого добиться?
В вашем примере объявляется внутренний модуль TypeScript <1.5 , который теперь называется пространством имен . Старый
module App {}
синтаксис теперь эквивалентенnamespace App {}
. В итоге работает следующее:Что, как говорится...
Старайтесь избегать экспорта пространств имен и вместо этого экспортируйте модули (которые ранее назывались внешними модулями ). При необходимости вы можете использовать пространство имен при импорте с шаблоном импорта пространства имен следующим образом:
источник
Помимо ответа А. Тима, бывают случаи, когда даже это не работает, поэтому вам необходимо:
источник
export class... {
, что angular не понравилось, что дало мне эту проблему. После исправления форматирования скомпилировал без проблем.В дополнение к ответу Тима эта проблема возникла у меня, когда я разбивал рефакторинг файла, разбивая его на отдельные файлы.
VSCode по какой-то причине выделил части моего кода [класса] с отступом, что и вызвало эту проблему. Сначала это было трудно заметить, но после того, как я понял, что код имеет отступ, я отформатировал код, и проблема исчезла.
например, все, что находится после первой строки определения класса, было автоматически с отступом во время вставки.
источник