Например, у меня есть модуль AMD в ванильных JS (не тронуты tsc
):Как сопоставить импорт по умолчанию для импорта по типу TypeScript ES6 для возврата значений модулей AMD?
// Foo.js
define([], function() {
return class Foo {}
})
с сопровождающей декларации файла:
// Foo.d.ts
declare class Foo {
// ...
}
export default Foo
тогда у меня есть модуль машинопись:
// app.ts
import Foo from './Foo'
new Foo // Uncaught TypeError: Foo_1.default is not a constructor
Когда я скомпилировал свой модуль ввода текста в формате AMD с помощью tsc
и запустил его в моей среде RequireJS, произошла ошибка default
не определен, потому что машинописный компилирует:
define("app", ["require", "exports", "Foo"], function (require, exports, Foo_1) {
"use strict";
console.log(Foo_1["default"]);
});
Я не хочу, чтобы захватить default
собственность. Я хочу, чтобы он обрабатывал импорт по умолчанию, поскольку он просто захватывает возвращаемое значение моего модуля определения. Каждый модуль в моем проекте представляет собой модуль define()
или машинописный модуль, составленный до define()
(AMD). Я просто хотел бы получить этот объект возврата.
Есть ли способ сделать это?
EDIT:
Я знаю, что могу import * as Foo from './Foo'
, но это своего рода Hacky, и это приводит к ошибкам, так как заявленная модуль не назвал экспорт. Я хотел бы, если это возможно, использовать метод без ошибок.
EDIT: Я узнал, что я могу просто сделать
// app.ts
import Foo = require('./Foo')
new Foo // no error
для достижения результата. Единственная проблема с этим - это не совместимость с ES6. Это означает, что если мы говорим машинописному описанию о том, чтобы оставить инструкции импорта ES6 как есть, тогда другие инструменты не будут понимать спецификации импорта/экспорта, специфичные для типов. Мне нужен способ использовать только официальный синтаксис модуля ES6 разумным способом.
Я думаю, что мое решение может состоять в том, чтобы просто выполнить шаг трансформации после tsc-преобразования, чтобы преобразовать точки доступа по умолчанию по умолчанию.
Это забавный способ, чтобы получить Foo. Если у меня есть 'tsc' игнорировать ошибки и все еще испускать пакет, это работает. Но есть ошибки, потому что файл '.d.ts' выглядит так, как он есть (см. Обновленный вопрос). Есть еще предложения? – trusktr
О, я полагаю, что 'import Foo = require ('./ Foo')' работает, но это не ES6, поэтому, если код когда-либо используется в других средах, где TS только компилирует язык, но оставляет синтаксис модуля в одиночку, т работы. Или это будет? – trusktr