typescript - 扩展内置节点类型的包的 TypeScript 类型
问题描述
我正在尝试为https://www.npmjs.com/package/keypress创建完整类型
我已经正确输入了基本函数(我认为),但无法弄清楚如何扩展process.stdin
该包的声明以使 IntelliSense 满意。
具体来说,keypress
添加一个process.stdin.on('keypress', listener)
事件。listener
有签名之类的(ch: Ch, key?: Key) => void
。
我不确定是否需要扩展Process
接口或ReadStream
接口,因为理论上如果我理解正确,它可以在任何ReadStream
.
我也不确定是否可以通知 TypeScript 它正在调用添加功能keypress()
的 a ReadStream
。例如,阻止访问除非keypress()
被调用。我怀疑这是可能的,但询问是否可能。
这是我目前的尝试:
declare module "keypress" {
export default function keypress(stream: NodeJS.ReadStream): void;
export type Ch = any; // TODO
export type Key = {
// TODO
ctrl: any;
name: string;
};
namespace global {
namespace NodeJS {
interface Process {
stdin: NodeJS.ReadStream & {
fd: 0; // From official node types
on(event: "keypress", listener: (ch: Ch, key?: Key) => void): this;
};
}
}
}
}
我已经尝试了一些变化,但我宁愿不要盲目射击。对此的任何指示都非常感谢。干杯!
解决方案
查看官方节点类型定义,这是您要扩展的内容:https ://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/node/process.d.ts#L217
您的方法对我来说看起来不错,但是我认为目前无法做到这一点。您可以使用声明合并来扩展类型,但不能使用它来覆盖类型的现有成员。否则,多个类型定义可能会相互冲突。
但是这里有关于实施解决方案的讨论:https ://github.com/microsoft/TypeScript/issues/36146
推荐阅读
- python - 使用python翻转图像
- r - 为什么我的空间连接使用 sp 与 sf 包返回不同的结果?
- javascript - 在哪里手动编辑这个用 JavaScript 制作的特定日历中的事件名称
- javascript - Material ui appbar 在移动设备上不会缩小
- firebase - Picasso 不会加载存储在 Firebase 托管 URL 中的图像
- php - 在 Laravel Blade 中格式化动态日期
- r - 回车不适用于 ANSI 富文本
- python - 在 Python 中在函数参数(isinstance)中使用运算符时出错
- android - 如何从文本文件中获取 URI?
- dart - 在 Dart 的 Cloud Firestore 中添加文档后如何获取文档 ID