Typescript 如何声明返回自己原型的函数的类型?

Typescript 如何声明返回自己原型的函数的类型?,typescript,Typescript,我正在尝试编写类型定义,这将导致以下代码进行类型检查: //神话成为原型,但不能用'new'创建` const created=虚构(“你好”); //推断的'created'类型应使'takeAction'可用 创建。采取行动(); 函数sampleFunction(arg:string | MyThing){ if(arg神话实例){ //检查实例应使“takeAction”可用 arg.takeAction(); } } 样本函数(已创建); 到目前为止,我已经尝试过: 接口神话{ ta

我正在尝试编写类型定义,这将导致以下代码进行类型检查:

//神话成为原型,但不能用'new'创建`
const created=虚构(“你好”);
//推断的'created'类型应使'takeAction'可用
创建。采取行动();
函数sampleFunction(arg:string | MyThing){
if(arg神话实例){
//检查实例应使“takeAction”可用
arg.takeAction();
}
}
样本函数(已创建);
到目前为止,我已经尝试过:

接口神话{
takeAction():无效;
}
声明函数神话(id:string):神话;
这是可行的,只是
instanceof
没有正确地缩小类型范围。我也试过:

声明类神话{
构造函数(id:string);
takeAction():无效;
}
但是,这会在声明
创建的
行上导致错误,因为不能调用
。我还尝试了一些类型合并的变体,将调用接口添加到声明的
MyThing
类中,但这也不起作用:在每种情况下,我都会收到以下错误消息:

Value of type 'typeof MyThing' is not callable. Did you mean to include 'new'?
不幸的是,我正试图描述一个现有的代码库,所以要求
新的神话
不是一个选项


有没有一种方法可以正确声明MyThing的类型?

请注意声明数组的标准库,如下所示:

接口数组{
长度:数字;
//...
}
接口阵列构造器{
// ...
新(排列长度:编号):T[];
(排列长度:编号):T[];
只读原型:数组;
}
声明常量数组:ArrayConstructor;
我们可以将
神话化
声明为:

接口神话{
takeAction():无效;
}
接口神话构造函数{
只读原型:神话;
(id:string):虚构;
}
声明常量MyThing:MyThingConstructor;

谢谢:这正是我所需要的。