📜  TypeScript 中的环境是什么?

📅  最后修改于: 2022-05-13 01:56:45.436000             🧑  作者: Mango

TypeScript 中的环境是什么?

Typescript 提供了一种以更简单、更安全的方式使用第三方库(如 Node.js、jQuery、AngularJS 等)的方法。这些是在环境声明的帮助下完成的。

环境声明是一种通知 TypeScript 编译器真正的源代码(如函数或变量)存在于另一个地方的方法。如果我们在运行时不存在这些源代码时尝试使用它们,那么它会在不提示的情况下崩溃。如果我们的 TypeScript 代码需要使用第三方 JavaScript 库,例如 jQuery、AngularJS、Node.js 等,我们必须始终编写环境声明。

当使用 jQuery、AngularJS、Node.js 等这些 JavaScript 库时,验证代码完成和类型安全对于 TypeScript 程序员来说变得很困难。因此,环境声明有助于将其他 JavaScript 库直接集成到 TypeScript 中。

定义环境声明:环境声明文件必须以扩展名d.ts保存。在扩展名为d.ts的环境声明文件中,必须在每个根级别定义前加上declare关键字。作者将被清除,TypeScript 不会发布任何代码。作者要求确认在运行时声明的项目将存在。

环境声明文件类似于 doc 文件(如果源发生更改,则 doc 文件需要保持更新)。因此,如果环境声明文件未更新,那么它们将返回编译错误。按照惯例,环境声明文件保存在扩展名为 d.ts 的类型声明文件中。如下所示:

Trial.d.ts

上述文件不能转编译成 JavaScript 文件。可用于代码补全 和类型安全。

现在要声明环境方法和变量,我们必须使用declare关键字。声明环境变量或环境声明的语法如下:

句法:

declare module module_name {
}

在客户端 TypeScript 文件中提及环境文件的语法如下:

/// 

特点:以下是 TypeScript 中环境的特点:

  • 环境声明允许安全地使用现有的广受欢迎的 JavaScript 库。
  • 环境声明有助于将其他 JavaScript 库直接集成到 TypeScript 中。
  • 环境声明是一种告诉编译器现有变量/函数/等的方法。
  • 在环境声明中有一个 declare 关键字,这意味着我们在没有实现的情况下声明变量的类型,TypeScript 只会假设我们将以某种方式包含该实现(通过添加脚本标签或我们拥有的任何自定义编译器)。

应用程序: TypeScript 中的环境用于描述不是用 TypeScript 编写的库的形状,为此我们必须声明库显示的 API。这是因为 JavaScript 库几乎没有显示任何顶级对象,因此表示它们的一种更好的方法是命名空间。

我们在环境声明中调用了一个 declare 关键字,这意味着我们声明了一个变量的类型而不需要它们的实现,TypeScript 只会假设我们将以某种方式构成该实现(通过添加脚本标签或我们拥有的任何自定义编译器)。通常,它们在 .d.ts 文件中进行描述。因此,我们必须编写一个环境模块来为已经用 JavaScript 编写的代码编写类型声明。如上所述,这些定义在以 .d.ts 文件扩展名结尾的文件中。

因此,从根本上说,环境声明是编译器做出的保证。如果第三方库在运行时不存在,并且如果我们尝试使用它们,那么事情将会在没有警告的情况下中断。

示例 1:要了解环境声明,请查看下面给出的示例。这里第三方 JavaScript 库与下面给出的代码一起使用:

Javascript
var TestSum;    
(function (TestSum) {    
   var Calc = (function () {   
      function Calc() {   
      }   
      Calc.prototype.doSum = function (x, z) {  
         return x + z;  
      }  
   })  
})


Javascript
declare module TestAdd{   
   export class Calc {   
      doAdd(x:number, z:number) : number;   
   }  
}


Main.ts
var obj = new TestAdd.Calc();   
console.log("Add: " +obj.doAdd(60, 15));


Javascript
var TestDif;
(function (TestDif) {    
   var Calc = (function () {   
      function Calc() {   
      }   
      Calc.prototype.doDif = function (x, z) {  
         return x - z;  
      }  
   })  
})


Javascript
declare module TestDif{   
   export class Calc {   
      doSubtract(x:number, z:number) : number;   
   }  
}


Main.ts
var obj = new TestDif.Calc();   
console.log("Subtract: " + obj.doSubtract(50, 10));


作为一个 JS 文件,我们没有时间将这个库重写到 typescript 中。但是,您确实需要添加具有类型安全性的doAdd()函数,然后通过使用环境声明我们可以做到这一点。所以,现在我们将创建一个环境声明文件。

Javascript

declare module TestAdd{   
   export class Calc {   
      doAdd(x:number, z:number) : number;   
   }  
}

现在,我们将在 typescript 文件中包含这个环境声明文件 (CalAdd.d.ts)。下面给出——

Main.ts

var obj = new TestAdd.Calc();   
console.log("Add: " +obj.doAdd(60, 15));

现在,通过在控制台上使用以下命令,编译并执行 Main.ts 文件:

$ tsc main.ts
$ node Main.js

输出:我们将得到以下输出:

75

示例 2:要了解环境声明,请查看下面给出的示例。这里第三方 JavaScript 库与下面给出的代码一起使用:

Javascript

var TestDif;
(function (TestDif) {    
   var Calc = (function () {   
      function Calc() {   
      }   
      Calc.prototype.doDif = function (x, z) {  
         return x - z;  
      }  
   })  
})

作为一个 JS 文件,我们没有时间将这个库重写到 typescript 中。但是,您确实需要添加具有类型安全性的doSubtract()函数,然后通过使用环境声明我们可以做到这一点。所以,现在我们将创建一个环境声明文件。

Javascript

declare module TestDif{   
   export class Calc {   
      doSubtract(x:number, z:number) : number;   
   }  
}

现在,我们将在 typescript 文件中包含这个环境声明文件。下面给出:

Main.ts

var obj = new TestDif.Calc();   
console.log("Subtract: " + obj.doSubtract(50, 10));

现在,通过在控制台上使用以下命令,编译并执行 Main.ts 文件:

$ tsc main.ts 
$ node Main.js

输出:我们将得到以下输出:

40