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

标签 javascript typescript

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

export function a() {}

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

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

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

最佳答案

此工作需要的是与 JavaScript 文件(在本例中为 a.d.ts)同名的 typescript 定义文件,其中包含:

export function a();

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

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

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

所以它考虑了 typescript 定义文件。它仍将使用 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();

关于javascript - 我可以为本地 JavaScript 模块创建定义文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39513195/

相关文章:

javascript - Angular 7 - 如何使初始输入值对 JSON 可见?

typescript - 如何检查一种类型是否具有另一种类型的所有键但没有附加键?

javascript - 无法使用 res.send() 使用 express with node 发送数字

javascript - 什么是语义 Action ?

typescript - 如何让 TypeScript 知道自定义 Jest 匹配器?

javascript - Angular 5 - 如何重定向到具有特定 header 的外部 URL?

javascript - PHP/将数字作为字符串发布,intval无法将其转换为数字

javascript - Rails 远程呈现一个 json 页面并且 JS ajax 处理程序没有捕获

javascript - 从 getInitialState 渲染一次,然后在 componentDidMount 之后再次渲染

typescript - TypeScript 中的构造函数重载