class - 在与语言无关的上下文和 typescript 中,环境类是什么?

标签 class typescript

我听说过许多不同类型的类,但是 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/

相关文章:

java - 如何将随机对象放入堆栈而不使对象变成 DeferredElementImpl?

c# - 设计一个 BigNumber 类

swift - 没有参数的方法正在调用参数

c++ - 指针、自定义类、Seg Fault 11s

python - 是否可以抓取未分配给变量的实例化对象?

javascript - Angular + Electron基本应用程序不会刷新页面的一部分

javascript - 如何使用 TypeScript 导入自定义 node.js 插件模块

typescript - TS抽象方法实现可以定义union-type的任意元素作为参数

angular - TS2339 : Property 'href' does not exist on type 'HTMLElement'

javascript - 使用 AnalogJS 渲染具有 2 个或更多路由参数的路由?