Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何定义同名的Typescript构造函数和工厂函数?_Javascript_Typescript - Fatal编程技术网

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

Javascript 如何定义同名的Typescript构造函数和工厂函数?,javascript,typescript,Javascript,Typescript,我正在为一个应用程序编写一个Typescript定义文件。 在这个库中,有一些函数可以被称为构造函数或工厂。 如何以兼容的方式书写打字 以下是一个具体的调用示例: var streamParser=N3.streamParser(); var streamParser=new N3.streamParser(); 我目前的做法是只支持工厂 函数解析器(选项?:解析器选项):N3Parser; 让新的工作的明显方法是创建一个类 类解析器{ 构造函数(选项?:解析表达式); } 但这两种方法是

我正在为一个应用程序编写一个Typescript定义文件。 在这个库中,有一些函数可以被称为构造函数或工厂。 如何以兼容的方式书写打字

以下是一个具体的调用示例:

var streamParser=N3.streamParser();
var streamParser=new N3.streamParser();
我目前的做法是只支持工厂

函数解析器(选项?:解析器选项):N3Parser;
新的
工作的明显方法是创建一个类

类解析器{
构造函数(选项?:解析表达式);
}
但这两种方法是不相容的。 文章开头的段落表明这是可能的,但没有给出示例

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

接口解析器{
新:(选项?:解析表达式)=>N3Parser;
}
函数解析器(选项?:解析器选项):N3Parser;

您可以按照与和中所做的相同操作进行操作:


()

尼特赞·托默的回答恰到好处

对于我的特殊情况,构造的对象具有不同的接口,构造函数需要一些重载。 下面的示例显示了构造函数接口如何轻松支持这些需求

interface N3Parser { }
interface ParserOptions {[key: string]: string }

interface ParserConstructor {
    new (options?: ParserOptions): N3Parser;
    (options?: ParserOptions): N3Parser;

    new (fd: any, options?: ParserOptions): N3Parser;
    (fd: any, options?: ParserOptions): N3Parser;
}
declare const Parser: ParserConstructor;

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

let p3 = Parser({ x: "y" });
let p4 = new Parser(3, { x: "y" });
interface N3Parser { }
interface ParserOptions {[key: string]: string }

interface ParserConstructor {
    new (options?: ParserOptions): N3Parser;
    (options?: ParserOptions): N3Parser;

    new (fd: any, options?: ParserOptions): N3Parser;
    (fd: any, options?: ParserOptions): N3Parser;
}
declare const Parser: ParserConstructor;

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

let p3 = Parser({ x: "y" });
let p4 = new Parser(3, { x: "y" });