[英]TypeScript typings for package that extends built-in node types
我正在尝试为https://www.npmjs.com/package/keypress创建完整类型
我已经正确输入了基本的 function(我认为),但无法弄清楚如何扩展process.stdin
的声明,因为这个 package 确实让 IntelliSense 高兴。
具体来说, keypress
添加了一个process.stdin.on('keypress', listener)
事件。 listener
器具有类似(ch: Ch, key?: Key) => void
的签名。
我不确定是否需要扩展Process
接口或ReadStream
接口,因为理论上如果我理解正确,它可以在任何ReadStream
上工作。
我也不确定是否可以通知 TypeScript 它正在添加功能的ReadStream
上调用 keypress keypress()
。 例如,除非调用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.