繁体   English   中英

TypeScript 类型用于扩展内置节点类型的 package

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM