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

Kam*_*zot 6 javascript typescript

假设我有一个a.js包含以下内容的文件:

export function a() {}
Run Code Online (Sandbox Code Playgroud)

我希望它像这样从文件b.ts(在同一目录中)导入它:

import { a } from './a.js'
Run Code Online (Sandbox Code Playgroud)

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

Kam*_*zot 5

要使其工作所需的是与 JavaScript 文件(a.d.ts在本例中)相同的打字稿定义文件,其中包含:

export function a();
Run Code Online (Sandbox Code Playgroud)

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

另一个变化是这个 JavaScript 模块需要被导入b.ts为:

import { a } from './a' // without .js
Run Code Online (Sandbox Code Playgroud)

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


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

declare var whateva:any;
export = whateva;
Run Code Online (Sandbox Code Playgroud)

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

import * as ajs from './a'
Run Code Online (Sandbox Code Playgroud)

然后引用a.jsTypeScript 文件中公开的任何函数,如下所示:

ajs.a();
Run Code Online (Sandbox Code Playgroud)