Похожие вопросы:
Как я могу импортировать Javascript-модуль AMD во внешний модуль TypeScript?
Я попробовал обходной путь в вопросе выше, он, безусловно, работает. Но это не сработало, когда модуль AMD возвращает саму функцию как модуль (не {message:Function}
, а Function
сам), используя module.exports=function ..
log.js: (так же, как вопрос выше)
define(["require", "exports"], function(require, exports) {
function message(s) {
console.log(s);
}
exports.message = message;
});
log.d.ts: (тот же)
declare module 'log'{
export function message(s:string);
}
log2.js:
define(["require", "exports","module"],function(require, exports,module) {
function message(s) {
console.log(s);
}
module.exports = message;
});
log2.d.ts:
declare module 'log2'{
export default function (s:string);
}
main.ts:
import log = require('log');
log.message("hello"); // It works
import log2 = require('log2');
log2("hello"); // Error error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'typeof import("log2")' has no compatible call signatures.
log2.default("hello"); // Compile passed. But runtime error on the browser (Uncaught TypeError: log2.default is not a function)
Я скомпилировал эти * .ts файлы с помощью tsc -m amd
(tsc Версия 3.2.4) и использовал require.js 2.3.5 для запуска программы в браузере. Но log2 не запускается (см. Main.ts).
Возможно, я неправильно понимаю использование export default
в log2.d.ts. Как правильно написать определение типа?