尝试声明一个函数,收到错误 TS2384:重载签名必须全部是环境或非环境

Mid*_*Raj 11 typescript

我正在声明一个名为 getValue 的函数。然后我定义这个getValue。但我收到错误

error TS2384: Overload signatures must all be ambient or non-ambient

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

declare function getValue(key:string):any;

function getValue(key:string):any{
    return key;
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*yne 19

declare意味着您从来不打算为该变量提供值。它对编译器说:

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

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

(其次,declare对于类型系统的学术探索很有用。您可以将declare变量与类型一起使用,而无需为其提供值,然后检查使用该变量的下游类型。这种用法绝对不适合生产代码。


环境过载特征是什么意思?

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

非环境签名是什么意思?

这意味着该功能可能存在一个实现。

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

你不知道。如果要编写函数的实现,请不要使用declare该函数类型的关键字。