【问题标题】:Change type imported from typings definition更改从类型定义导入的类型
【发布时间】:2016-09-19 08:59:21
【问题描述】:

我刚刚开始使用 Typescript,并试图让编译器让我在以下内容中执行 replServer.context.something = 123

import repl = require('repl');

let replServer = repl.start({
  prompt: '>> '
});

replServer.context.something = 123;

但它抱怨:“类型'EventEmitter'上不存在属性'context'”。

我已经使用typings install dt~node --save --global 安装了类型定义,repl 模块在typings/globals/node/index.d.ts 中定义如下:

declare module "repl" {
    import * as stream from "stream";
    import * as events from "events";

// ...
    export function start(options: ReplOptions): events.EventEmitter;
}

我想解决方案包括定义我自己的扩展 events.EventEmitter 的类型,该类型具有任何类型的 context(对象?),然后以某种方式覆盖 typings/globals/node/index.d.ts 中的定义以使用新类型。

这是对的吗?它是如何完成的? (我想你不理会typings/globals/node/index.d.ts 并在某处添加另一个文件(可能在typings 目录之外)。

Typescript 读取这些定义文件(index.d.ts 和覆盖此定义的文件)的顺序是否重要?

谢谢!

编辑 1:

我最终尝试了我的想法并且它正在工作(但这取决于目录命名......即黑客)。

我添加了typings2/node/index.d.ts 和以下内容:

declare module "repl" {
    import * as events from "events";

    interface ReplEventEmitter extends events.EventEmitter {
      context: any;
    }

    export function start(options: ReplOptions): ReplEventEmitter;
  }

它工作正常(即保留以前的定义并添加context),但这取决于我将其命名为之后 typings 之后的目录。

我正在使用 Atom,并且我正在使用的插件会自动更改 tsconfig.json 中的“文件”字段以列出要包含以进行编译的文件。

如果我的文件在“文件”(由 Atom 插件管理)中位于 typings/globals/node/index.d.ts 之前,则此方法不起作用。它需要在它之后(否则,它会生效:export function start(options: ReplOptions): events.EventEmitter;)。

这样做的“正确”方法是什么?

【问题讨论】:

    标签: typescript typescript-typings


    【解决方案1】:

    这样做的“正确”方法是什么?

    外部模块定义受到锁定的影响。如果支持context,建议对原定义文件进行PR。

    另类

    创建typings 文件的本地副本,不再依赖上游版本。我也这样做:https://github.com/alm-tools/alm/tree/master/src/typings

    仍然比 JavaScript 好(完全没有帮助)。

    【讨论】:

    • 感谢链接(不知道 alm)。获得“锁定”意味着您无法扩展它?所以基本上,大多数时候您将维护自己使用的库的类型定义(因为完全键入它们似乎很难)。至少在 PR 被合并之前。好,可以。是的,当你想要类型时仍然比 JS 更好:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多