什么是环境声明

Max*_*kyi 18 typescript

我一直在看很多文章提到ambient declarations.例如这篇文章.这些是什么?有人可以提供一个例子吗?环境声明是在现有的原型文件之外创建但在这些文件中使用的类型的声明吗?所有声明都是环境声明吗?

据我所知ambient declarations,不生成任何JavaScript代码,并使用declare关键字定义.这是环境声明的唯一情况还是其他情况?

Nit*_*mer 19

是的,环境声明允许您告诉编译器现有的变量/函数/等.

例如,假设您在网页中使用的是添加全局变量的库,假设它的名称是ON_READY,它是对函数的引用.
你需要为它分配一个函数,所以你会做类似的事情:

ON_READY = () => {
    console.log("ready!");
    ...
};
Run Code Online (Sandbox Code Playgroud)

编译器会抱怨:

找不到名字'ON_READY'

因此,您使用环境声明来通知编译器此变量存在以及它的类型是什么:

declare var ON_READY: () => void;
Run Code Online (Sandbox Code Playgroud)

现在它不会抱怨找不到它.


编辑

使用declare关键字时,它始终是环境,就像您链接到的文章中所述:

declare关键字用于环境声明,您可以在其中定义可能不是源自TypeScript文件的变量

非环境声明只是正常的变量/函数声明:

let x: number;
const y = "string";
var a = () => { console.log("here"); }
Run Code Online (Sandbox Code Playgroud)

  • 我不会使用"外面",它更像是"相信我,它存在" (4认同)
  • 相关:https://github.com/Microsoft/TypeScript-Handbook/issues/180 和 https://github.com/typings/typings/issues/343 (3认同)