如何将自定义类型定义文件转换为 npm 类型定义文件

时间:2021-05-30 15:10:34

标签: typescript coffeescript typescript-typings module-augmentation

我的打字稿项目中有一个用 CoffeeScript 编写的依赖项的自定义模块定义文件。

它看起来像下面这样,效果很好:

src/@types/dependency-name.d.ts

exports.scheduledFunctionCrontab = functions.pubsub.schedule('0 11 * * *')
  .timeZone('America/New_York') // Users can choose timezone - default is America/Los_Angeles
  .onRun((context) => {
  console.log('This will be run every day at 11:05 AM Eastern!');
  return null;
});

所以我想为这个项目做贡献并提交一个类型定义文件。

我尝试的是:

  1. 分叉了原始的 CoffeeScript 项目,
  2. 将上述定义复制到 - npm install -g firebase-tools@9.6.1
  3. 将以下行添加到 declare module 'dependency-name' { import EventEmitter from 'eventemitter3'; /** * omitted */ interface ICable { new (channels: Record<string, ISubscription>): ICable; channels: Record<string, ISubscription>; channel: (name: string) => ISubscription | undefined; setChannel: (name: string, channel: ISubscription) => ISubscription; } export const Cable: ICable; }
index.d.ts
  1. 在我的打字稿项目中安装了分叉存储库以进行测试。

但是,它无法识别添加的 pacakge.json 文件。显示类型定义丢失错误。

我看过 this post 并猜测是这个问题:

<块引用>

作为外部模块编写

但是我不明白。有人可以指导我将我的自定义类型(我猜是模块扩充)转换为正确的 "typings": "index.d.ts", 类型定义文件吗?

1 个答案:

答案 0 :(得分:1)

我建议直接查看从您链接的帖子中链接的 TypeScript handbook page,因为帖子本身相当陈旧,而且那里的文本副本有点过时。特别是,"types" 现在比 "typings" 中的 package.json 更受欢迎,尽管两者都应该仍然有效。

但是,您和帖子是正确的,问题是环境外部模块(“环境模块”)与非环境模块(“外部模块”)之一。您应该只需要删除环绕文件的 declare module 块,将其内容保留在顶层。这会将您的声明从环境转换为非环境,并且应该可以正常工作。