6

我听说过很多不同类型的类,但是 Ambient 类有什么作用,它到底是什么?它与任何其他班级有何不同?

我通过观看一些关于 typescript 的视频了解到这一点,他们总是在谈论 Ambient 类,但他们继续定义常规的旧类,我的意思是,它似乎与具有变量和函数的普通类没有什么不同它。

因此,如果有人可以,请在与语言无关的上下文中定义环境类是什么以及它在打字稿中的含义是什么?

4

1 回答 1

12

环境声明用于为某些现有代码提供类型信息。

例如,如果您在 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 中重新编写它,因此拥有环境声明可以让您以最小的影响进行更新(您可能必须添加新功能,但由于实施细节,您永远不必进行更改)。环境声明充当合同,说明第三方库的作用。

您可以通过阅读我的编写环境声明指南了解更多信息,并且您可以在“绝对类型化”上找到许多流行的 JavaScript 库的现有环境声明

于 2013-08-21T09:48:20.337 回答