javascript - 如何定义同名的 Typescript 构造函数和工厂函数?

标签 javascript typescript

我正在为 existing Javascript library 编写 Typescript 定义文件. 在这个库中有一些函数可以被称为构造函数或工厂。 如何以兼容的方式编写类型?

这里是调用 need to be supported according to the README 的具体示例:

var streamParser = N3.StreamParser();
var streamParser = new N3.StreamParser();

我目前的做法是只支持工厂。

function Parser(options?: ParserOptions): N3Parser;

new 工作的明显方法是创建一个类。

class Parser {
  constructor(options ? : ParserOptions);
}

但这两种方法是不兼容的。 declartion-file deep-dive的开篇表示这是可能的,但没有给出示例。

注意: 以下两个定义是兼容的,但是......那么,什么?

interface Parser {
  new: (options ? : ParserOptions) => N3Parser;
}

function Parser(options ? : ParserOptions): N3Parser;

最佳答案

您可以按照在 lib.d.ts 中完成的相同操作进行操作与 ArrayArrayConstructor :

interface Parser {}

interface ParserConstructor {
    new (options?: ParserOptions): Parser;
    (options?: ParserOptions): Parser;
}

declare const Parser: ParserConstructor;

let p1 = Parser();
let p2 = new Parser();

( code in playground )

关于javascript - 如何定义同名的 Typescript 构造函数和工厂函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40158295/

相关文章:

javascript - 预加载器 : how to delete current loader div to show content div

javascript - Selenium driver.get() 在函数组合下不起作用

typescript - 如何从嵌套数组创建联合类型?

reactjs - useRef 不起作用 [TypeError : null is not an object (evaluating 'filed2.current.focus' )]

node.js - ionic - 关于版本的困惑

javascript - 添加 mixin 函数的 Typescript 定义

html - 在 TypeScript 中选择文本

javascript - Object.getPrototypeOf(Object) 和 Object.prototype 有什么区别?

javascript - 访问和修改 iframe 内容,postMessage 与 jQuery.contents()

JavaScript 和未定义的值