首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >es6 TS模块导入AMD模块:我们能避免TS2306文件“.”的错误吗?不是模块吗?

es6 TS模块导入AMD模块:我们能避免TS2306文件“.”的错误吗?不是模块吗?
EN

Stack Overflow用户
提问于 2017-01-23 02:50:52
回答 1查看 289关注 0票数 1

我的文件A.js (非类型记录)如下所示:

代码语言:javascript
复制
module({
}, function (imports) {
    return {
        foo: function () {
            // ...
        }
    };
});

这是一种类似于AMD的模块格式,其实现类似于需求,只是略有不同的格式。

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

代码语言:javascript
复制
import A from '../old-code/A'
console.log(A)

这就产生了一个错误,比如

代码语言:javascript
复制
ERROR in ./src/app.ts
(9,17): error TS2306: File '/path/to/B.js' is not a module.

有什么方法可以解决这个问题,这样TypeScript才能知道如何导入它吗?

我是TypeScript的新手..。我有种感觉有办法为它做一个类型定义什么的?

编辑:我读过关于声明文件的文章,但没有提到如何导入一个不是TypeScript的文件。

我希望有一种方法来定义文件导入和导出的内容。如果不是这样的话,那就太好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-23 03:13:49

这是一种类似于AMD的模块格式,其实现类似于需求,只是略有不同的格式。

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

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

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

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

A.d.ts

代码语言:javascript
复制
declare var a: {
    test: number
}
export = a

注意命名约定,如果您有代码A.js,编译器将自动搜索配套的A.d.ts以查找import * as A from './A'

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41798603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档