es6 TS模块导入类似AMD的模块:我们可以避免错误TS2306 File" ..."不是一个模块?

时间:2017-01-23 02:50:53

标签: typescript

我有文件A.js(非TypeScript),如下所示:

module({
}, function (imports) {
    return {
        foo: function () {
            // ...
        }
    };
});

采用类似于AMD的模块格式,其实现类似于requirejs,格式略有不同。

然后文件B.ts(TypeScript)导入它:

import A from '../old-code/A'
console.log(A)

这会产生错误,如

ERROR in ./src/app.ts
(9,17): error TS2306: File '/path/to/B.js' is not a module.

有没有办法解决这个问题,以便TypeScript可以知道如何导入它?

我是TypeScript的新手......我觉得有一种方法可以为它做一个类型定义吗?

编辑:我读到了declaration files,但是没有说明如何处理非TypeScript文件。

我希望有一种方法来定义文件导入和导出的内容。如果没有,那就很难添加。

1 个答案:

答案 0 :(得分:0)

  

采用类似于AMD的模块格式,其实现类似于requirejs,格式略有不同。

据我所知,在TypeScript中导入非标准模块需要修改编译器,这对最终用户来说是不可能的。

但是,你仍然可以通过declare function require(mod: string): any或模块系统中类似的东西做出让步。

然后您可以编写require('A')以在运行时导入模块。成本在编译时没有类型检查。

如果您没有使用allowJS标志。您还可以编写声明文件,如:

A.d.ts

declare var a: {
    test: number
}
export = a

注意命名约定,如果您有代码A.js,编译器会自动搜索A.d.ts

的伴随import * as A from './A'