我听说过许多不同类型的类,但是 Ambient 类的作用是什么?它到底是什么?它与其他类(class)有何不同?
我是通过观看一些关于 typescript 的视频了解到这一点的,他们总是在谈论环境类,但他们继续定义常规的旧类,我的意思是,这似乎与带有变量的普通类没有什么不同并在其中发挥作用。
因此,如果有人可以,请定义环境类在与语言无关的上下文中是什么,它在 typescript 中意味着什么?
最佳答案
环境声明用于为某些现有代码提供类型信息。
例如,如果您在 TypeScript 中编写了以下内容:
module Example {
export class Test {
do() {
return 'Go';
}
}
}
var test = new Example.
您将在 .
之后获得自动完成,以帮助您发现 Test
类。
如果您已经拥有从某些 TypeScript 代码使用的整个 JavaScript 负载,您将不会获得此自动完成功能,并且您执行的位置也不会识别类型。与其在 TypeScript 中重写整个 JavaScript 文件,不如为它编写一个环境声明。
例如,假设以下 JavaScript 文件更大,需要很长时间才能用 TypeScript 重写:
var Example;
(function (Example) {
var Test = (function () {
function Test() {
}
Test.prototype.do = function () {
return 'Go';
};
return Test;
})();
Example.Test = Test;
})(Example || (Example = {}));
环境声明包含类型信息,但不包含实现:
declare module Example {
export class Test {
do() : string;
}
}
这使您可以对 JavaScript 进行完整的类型检查和自动完成,而无需在 TypeScript 中重写整个内容。
你会在什么时候做这件事?通常,当你使用一堆第三方 JavaScript 时,你会写一个环境声明——你不能在每次更新库时用 TypeScript 重写它,所以有一个环境声明可以让你以最小的影响进行更新(您可能需要添加新功能,但您永远不必根据实现细节进行更改)。环境声明充当契约(Contract),说明第三方库的作用。
您可以通过阅读我的 guide to writing ambient declarations 了解更多信息, 你可以找到很多 existing ambient declarations for popular JavaScript libraries on Definitely Typed .
关于class - 在与语言无关的上下文和 typescript 中,环境类是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18353933/