Typescript es6 TS模块导入一个类似AMD的模块:我们能避免TS2306文件错误吗&引用;不是模块吗?

Typescript es6 TS模块导入一个类似AMD的模块:我们能避免TS2306文件错误吗&引用;不是模块吗?,typescript,Typescript,我的文件A.js(非类型脚本)如下所示: module({ }, function (imports) { return { foo: function () { // ... } }; }); 它的模块格式类似于AMD,实现类似于requirejs,只是格式稍有不同 然后文件B.ts(TypeScript)将其导入: import A from '../old-code/A' console.log(A) 这会产生如下

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

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的文件

我希望有一种方法可以定义文件导入和导出的内容。如果不是的话,那就再加一句吧

它的模块格式类似于AMD,实现类似于requirejs,只是格式稍有不同

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

但是,您仍然可以通过
声明函数require(mod:string):模块系统中的任何
或类似内容做出让步

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


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

A.d.ts

declare var a: {
    test: number
}
export = a
注意命名约定,如果您有代码
A.js
,编译器将自动搜索一个伴随的
A.d.ts
,以
import*作为from./A'

它的模块格式类似于AMD,实现类似于requirejs,只是格式稍有不同

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

但是,您仍然可以通过
声明函数require(mod:string):模块系统中的任何
或类似内容做出让步

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


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

A.d.ts

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

请注意命名约定,如果您有code
A.js
,编译器将自动搜索一个伴随的
A.d.ts
,以查找
import*作为from./A'

我将它放在哪里?我是否将它放在
A.d.ts
旁边的
A.js
中?对于
declare reuiqre
,将它放在编译器将搜索的全局
typing.d.ts
中。我还使用
A.d.ts
更新了方法。请检查一下。我确实在使用
allowJs
,并且在该文件中发现了错误。我想我还有一些学习要做!基本上,
A.js
导出一个属性为
foo
对象,该属性为'Function',没有参数和返回值。d.T.可能会怎样。文件看起来像什么?恐怕你不能。因为
allowJs
指示编译器查找JavaScript源代码而不是您的定义文件。因此,
declare require
方法是更好的方法。我已将
allowJs
设置为true,但文件
A.js
includes
位置之外,我正在使用
路径
定义非ts文件的位置。我也让它工作了,呜呜!我的
A.d.ts
文件看起来像
export function foo():void
,而我
B.ts
我从'external/path/A'导入{foo}
(从
external/path/A.js导入)。它正在编译,Webpack正在运行(我正在使用ts加载程序)。斯威耶!我该把它放在哪里?我是否将它放在
A.d.ts
旁边的
A.js
中?对于
declare reuiqre
,将它放在编译器将搜索的全局
typing.d.ts
中。我还使用
A.d.ts
更新了方法。请检查一下。我确实在使用
allowJs
,并且在该文件中发现了错误。我想我还有一些学习要做!基本上,
A.js
导出一个属性为
foo
对象,该属性为'Function',没有参数和返回值。d.T.可能会怎样。文件看起来像什么?恐怕你不能。因为
allowJs
指示编译器查找JavaScript源代码而不是您的定义文件。因此,
declare require
方法是更好的方法。我已将
allowJs
设置为true,但文件
A.js
includes
位置之外,我正在使用
路径
定义非ts文件的位置。我也让它工作了,呜呜!我的
A.d.ts
文件看起来像
export function foo():void
,而我
B.ts
我从'external/path/A'导入{foo}
(从
external/path/A.js导入)。它正在编译,Webpack正在运行(我正在使用ts加载程序)。斯威耶!