我可以为本地JavaScript模块创建定义文件吗?

时间:2016-09-15 14:05:32

标签: javascript typescript

假设我有一个a.js文件,其中包含:

export function a() {}

我希望它从文件b.ts(在同一目录中)中导入它,如下所示:

import { a } from './a.js'

如何告诉TypeScript a.js包含哪些文件,以便编译此导入成功?

2 个答案:

答案 0 :(得分:2)

这需要做的是打字原稿定义文件,其名称与JavaScript文件(在本例中为a.d.ts)相同,其中包含:

export function a();

它还可以指定参数类型,其他导出函数和类,并且必须使用export关键字来指示JavaScript文件实际公开的内容。

另一个变化是,此JavaScript模块需要在b.ts中导入为:

import { a } from './a' // without .js

所以它需要考虑打字稿定义文件。它仍将使用a.js文件中的实现。它也适用于webpack。

如果您不想描述a.js内的内容并让TypeScript接受它,您可以创建a.d.ts这样的文件:

declare var whateva:any;
export = whateva;

然后你可以像这样导入它:

import * as ajs from './a'

然后在TypeScript文件中引用由a.js公开的任何函数,如:

ajs.a();

答案 1 :(得分:1)

您只需使用声明:

declare var a:any;

(导入后)在同一个文件中,您正在使用a(我在b.ts中的情况)。多亏了这个,TS编译器不会抱怨。您的IDE也不会显示错误。