Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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
Typescript 试图声明函数时,出现错误TS2384:重载签名必须全部为环境或非环境签名_Typescript - Fatal编程技术网

Typescript 试图声明函数时,出现错误TS2384:重载签名必须全部为环境或非环境签名

Typescript 试图声明函数时,出现错误TS2384:重载签名必须全部为环境或非环境签名,typescript,Typescript,我正在声明一个函数,比如getValue。然后我定义这个getValue。但我也有错误 错误TS2384:过载签名必须全部为环境或非环境 环境过载签名是什么意思?非环境信号意味着什么?如何定义声明的函数而不出现此错误 declare function getValue(key:string):any; function getValue(key:string):any{ return key; } “环境”是一种不定义实现的声明(例如,使用declare关键字)。请参阅:。环境类型定

我正在声明一个函数,比如getValue。然后我定义这个getValue。但我也有错误

错误TS2384:过载签名必须全部为环境或非环境

环境过载签名是什么意思?非环境信号意味着什么?如何定义声明的函数而不出现此错误

declare function getValue(key:string):any;

function getValue(key:string):any{
    return key;
}
“环境”是一种不定义实现的声明(例如,使用
declare
关键字)。请参阅:。环境类型定义的要点是定义来自没有类型或可能存在于全局空间中的第三方库的类型。实际上,我不清楚为什么不允许混合环境声明和非环境声明的所有细节,但其中一个可能是您意外地重载了具有环境定义的现有第三方函数

您可以定义函数重载而无需声明,但它们仍然只能有一个实现:

// note that this doesn't actually overload anything yet
function getValue(key:string):any;
function getValue(key:string):any{
  return key;
}

declare
表示您不打算为该变量提供值。它对编译器说:

“我知道您可以看到的代码中不存在此值,但我向您保证,它是在某个可用于此范围的地方定义的,这是它的类型”

因此,如果您还提供了具体的值,那么就不需要
declare
。要么
declare
函数,这意味着它是在typescript编译器看不到的地方定义的,要么完全删除declare行并导出函数本身,以便在任何需要的地方使用


环境过载签名是什么意思

“环境”表示不存在任何实现。这是由
declare
关键字触发的。当您使用不同的参数类型/返回类型多次编写函数类型时,会出现签名。通过在两行中提到函数,typescript将其解释为函数重载

非环境信号意味着什么

这意味着该函数可能存在一个实现

如何定义声明的函数而不出现此错误

declare function getValue(key:string):any;

function getValue(key:string):any{
    return key;
}

你没有。如果要为函数编写实现,不要对该函数类型使用
declare
关键字。

只需删除
declare
关键字这是一个快速解决方案,但请告诉我为什么不能定义声明的函数相关:我是如何意外地重载具有环境定义的现有第三方函数的Pills@somanraj我是不是说你在做这个,我只是说如果你做了这个,你也会得到这个错误。这是这个错误可以防止的事情之一。@Explosin药丸谢谢,现在我得到了它。我想知道为什么declare没有像这样记录在typescript文档中。很遗憾,我自己找不到任何关于这个的文档。但这就是它的工作原理。declare工作原理的另一个例子:注意
getValue()
从未实现过,但typescript很高兴。