es6 TS模块导入了类似AMD的模块:我们可以避免错误TS2306文件“ ...”不是模块吗?

trusktr

我有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的新手...我感觉有一种方法可以为它定义类型或其他类型?

编辑:我读了有关声明文件,但没有说明如何导入不是TypeScript的文件。

我希望有一种方法可以定义文件的导入和导出。如果没有,那将是一件好事。

赫灵顿·黑霍尔姆

它的格式类似于AMD,实现方式类似于requirejs,只是格式略有不同。

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

但是,您仍然可以declare function require(mod: string): any在模块系统中进行让步或类似的让步

然后,您可以编写require('A')以在运行时导入模块。代价是在编译时不进行类型检查。


如果您不使用allowJS标志。您还可以编写一个声明文件,例如:

Adts

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

请注意命名约定,如果有代码A.jsA.d.ts编译器会自动搜索同伴,以查找import * as A from './A'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章