为返回模块本身的函数创建类型定义

时间:2019-09-26 12:28:16

标签: typescript typescript-typings

有一个看起来像这样的nodejs模块

module.exports = {
  init(arg1) {
    // ..
    return this;
  },
  // ..
};

我正在尝试编写定义文件。看起来像这样

declare namespace ModuleName {
  function init(smth: string): ModuleName;
}
export = ModuleName;
export as namespace ModuleName;
}

几乎可以正常工作。导入时

const a = require('ModuleName');

VSCode理解a.init是一个接受一个字符串参数的函数。但是我不能理解结果也具有可以调用的方法init。即

const b = a.init('smth');
b.init('smth2');

在这种情况下编写类型定义的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我只能通过接口找到方法,但不确定。

declare namespace ModuleName {

    interface IModuleName {
        init(s: string): IModuleName;
    }

    function init(s: string): IModuleName;
}

const m = require('ModuleName');
const a = m.init('a');
const b = a.init('b');

或更短

interface ModuleName {
    init(s: string): ModuleName;
}

const m: ModuleName = require('./ModuleName');
const a = m.init('a');
const b = a.init('b');