回复:如何将javascript AMD模块导入外部TypeScript模块? (使用module.exports = ...时)

时间:2019-01-25 03:36:57

标签: javascript typescript requirejs amd

相关问题: How can I import a javascript AMD module into an external TypeScript module?

我已经尝试了上述问题中的解决方法,它确实可以工作。但是,当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)

我用tsc -m amd(tsc版本3.2.4)编译了这些* .ts文件,并使用require.js 2.3.5在浏览器上运行该程序。但是log2无法运行(请参阅main.ts)。

也许我误解了log2.d.ts中export default的使用。如何正确编写类型定义?

1 个答案:

答案 0 :(得分:1)

尝试一下:

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

另请参阅:the Handbook