TS - 只能使用'new'关键字调用void函数

时间:2017-04-19 00:38:48

标签: node.js typescript typescript2.0

我从TypeScript得到了这个奇怪的错误:

  

“只能使用'new'关键字调用void函数。”

什么吗

enter image description here

构造函数,看起来像:

//example.h
#include "header1.h"
extern int randomNum;
extern Type foo(int);

我不知道问题是什么。我尝试添加和删除返回类型(void),但没有做任何事情。

2 个答案:

答案 0 :(得分:4)

正如肖恩所指出的,这是论证中类型不匹配的一个不那么明显的结果。

如果更深层次的原因让您感兴趣:当函数的参数不进行类型检查时,tsc会将返回类型推断为特殊类型never(覆盖您指定的void )。具有此类功能的new将导致TS2350 Only a void function can...

此代码段可以在没有错误参数的情况下触发TS2350。

function Ctor(): never {
    throw "never return";
}

const v = new Ctor();

答案 1 :(得分:3)

问题是,ISumanInputs不包含您在电话中包含的一项或多项属性,但您未正确履行IsumanInputs接口

在额外的属性情况下,您应该收到一个“额外”错误:

  

对象文字只能指定已知属性,'anExtraProp'在'ISumanInputs'类型中不存在

在遗失的属性案例中,您将收到不同的“额外”错误:

  

类型'{fileName:string;}中缺少属性'timestamp'; networkLog:string; outputPath:string; }”。

有趣的是,如果您将参数的定义移到行外,额外属性的情况不再失败:

const data = {
  fileName: "abc",
  networkLog: "",
  outputPath: "",
  timestamp: "",
  anExtraProperty: true
};

new Suman(data);