Re: Как я могу импортировать Javascript модуль AMD во внешний модуль TypeScript? (При использовании module.exports = ...) - PullRequest
0 голосов
/ 25 января 2019

Похожие вопросы: Как я могу импортировать 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. Как правильно написать определение типа?

1 Ответ

0 голосов
/ 25 января 2019

Попробуйте это:

// log2.d.ts
declare module 'log2'{
    function message(s: string);
    export = message;
}

См. Также: Справочник .

...