我听说过不同类型的课程,但Ambient课程做了什么,到底是什么?它与其他课程有什么不同?
我从观看一些关于打字稿的视频得到这个,他们总是在讨论Ambient类,但是他们继续定义常规的旧类,我的意思是对我来说,它似乎与一个带有变量和函数的普通类没什么不同它.
因此,如果有人可以,请在语言不可知的上下文中定义环境类是什么,它在打字稿中意味着什么?
Fen*_*ton 12
环境声明用于为某些现有代码提供类型信息.
例如,如果您在TypeScript中编写以下内容:
module Example {
export class Test {
do() {
return 'Go';
}
}
}
var test = new Example.
Run Code Online (Sandbox Code Playgroud)
您将在获得自动完成后.帮助您发现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 = {}));
Run Code Online (Sandbox Code Playgroud)
环境声明包含类型信息,但不包含实现:
declare module Example {
export class Test {
do() : string;
}
}
Run Code Online (Sandbox Code Playgroud)
这为您提供了JavaScript的完整类型检查和自动完成功能,而无需在TypeScript中重写整个内容.
你什么时候这样做?通常在使用大量第三方JavaScript时编写环境声明 - 每次更新库时都无法在TypeScript中重写它,因此使用环境声明可以让您以最小的影响进行更新(您可能必须添加新功能,但由于实现细节,您永远不必进行更改).环境声明充当合同,说明第三方库的作用.
您可以通过阅读我编写环境声明的指南找到更多信息,并且您可以在绝对类型上找到许多流行JavaScript库的现有环境声明.