【问题标题】:How to create TypeScript defs for third-party lib function that returns module itself如何为返回模块本身的第三方库函数创建 TypeScript defs
【发布时间】:2018-11-03 03:10:03
【问题描述】:

不确定我的标题是否正确。我正在为 NPM 包 prompt 创建一个类型声明文件。库本身是这样创建的:

var prompt = module.exports = Object.create(events.EventEmitter.prototype);
prompt.started = false;
/* ... */
prompt.start = function (options) {
    /* ... */
    prompt.memory = options.memory || 10;
    /* ... */
    prompt.started = true;
    return prompt;
}
/* ... */

我正在尝试按照DefinitelyTyped 的自动生成的类型/提示/index.d.ts 文件中的说明来了解如何创建.d.ts 文件。

看起来我会放

export function start(options?: promptOptions): **????**

定义我们在上面看到的prompt.start。我已经有了

export let started: boolean;

export interface promptOptions {
    memory?: number;
    allowEmpty?: boolean; // etc.
}

但我不确定该函数应该返回什么类型。它似乎正在返回模块本身的修改版本。我应该如何构建 .d.ts 文件?谢谢。

【问题讨论】:

  • 我敢打赌memory 和`started 键已经存在,但start() 只是为它们设置了新值。这意味着require('prompt')prompt.start() 可能返回完全相同的类型。
  • memory 没有。 start() 创建它。无论如何,你的评论触及了我不明白的核心:即使你说的是真的,what 我定义为start() 的返回类型?它似乎返回了模块自己的导出,所以我需要以某种方式将我自己的 index.d.ts 导入到与 PromptModule 之类的文件相同的文件中,然后放入 export function start(/*...*/): PromptModule; ???这是如何在单个 index.d.ts 文件中完成的?

标签: typescript definitelytyped


【解决方案1】:

您应该能够只创建一个类型,并在 .d.ts 文件的两个位置使用它。

我是打字稿的新手,但我认为你想要这样的东西:

// Set the type of the module.
export = Prompt

interface PromptOptions {
    memory?: number;
    allowEmpty?: boolean;
}

type Prompt = {
  memory?: number,
  started: boolean,

  // this type has a method that return itself.
  start(PromptOptions): Prompt
}

【讨论】:

    猜你喜欢
    • 2018-08-29
    • 1970-01-01
    • 2023-04-01
    • 2019-02-13
    • 2017-04-14
    • 2021-02-23
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多