TypeScript是流行的JavaScript编程语言的变体,它添加了一些对于企业开发很重要的关键功能。 特别是,TypeScript是强类型的 -程序员可以将变量和其他数据结构声明为特定类型,例如字符串或布尔值,并且TypeScript将检查其值的有效性。 这在松散类型的 JavaScript中是不可能的。
TypeScript强大的键入功能使许多功能成为可能,这些功能有助于使开发人员更加高效,尤其是在处理大型企业级代码库时。 TypeScript是经过编译的,而不是像JavaScript那样进行解释,这意味着可以在执行之前捕获错误。 执行后台增量编译的IDE可以在编码过程中发现此类错误。
尽管与JavaScript有关键的区别,但TypeScript仍可以在可以运行JavaScript的任何地方执行。 这是因为TypeScript不会编译为二进制可执行文件,而是会编译为标准JavaScript。 让我们深入了解更多信息。
TypeScript是JavaScript的超集 。 尽管任何正确JavaScript代码也都是正确的TypeScript代码,但TypeScript还具有不属于JavaScript的语言功能。 如前所述,TypeScript独有的最突出的功能-为TypeScript命名的功能是强类型化:TypeScript变量与一种类型相关联,例如字符串,数字或布尔值,它告诉编译器什么样的数据它可以容纳。 另外,TypeScript确实支持类型推断,并包含所有类型的所有类型,这意味着变量不必由程序员显式分配其类型。 稍后再进行更多说明。
TypeScript还设计用于面向对象的编程-JavaScript,不是很多。 在JavaScript中不直观的诸如继承和访问控制之类的概念很容易在TypeScript中实现。 另外,TypeScript允许您实现接口,这在JavaScript世界中是一个毫无意义的概念。
就是说,您无法使用TypeScript进行编码,也无法使用JavaScript进行编码。 这是因为TypeScript不是按常规意义编译的,例如C ++被编译为可以在指定硬件上运行的二进制可执行文件的方式。 相反,TypeScript编译器将 TypeScript代码转码为功能等效JavaScript。 肖恩·麦克斯韦(Sean Maxwell)在GitConnected上发表的这篇文章提供了一些很棒的面向对象的TypeScript代码片段及其JavaScript等效示例。 然后,可以从Web浏览器到配备Node.js的服务器,在任何JavaScript代码可以运行的任何地方运行生成JavaScript。
因此,如果最后说来TypeScript只是一种生成JavaScript代码的好方法,那为什么还要麻烦它呢? 要回答这个问题,我们需要查看TypeScript的来源以及其用途。
在Microsoft内部开发后,TypeScript于2012年作为开源发布。 (软件巨人仍然是该项目的管家和主要开发人员。) 当时的ZDNet文章对发生这种情况的原因提供了一个有趣的了解:“事实证明,最大的动机之一是试图开发的Microsoft其他团队的经验。并使用JavaScript维护Microsoft产品。”
当时,Microsoft试图扩大Bing Maps的规模以使其成为Google Maps的竞争对手,并提供其Office套件的Web版本-JavaScript是该任务的主要开发语言。 但是,从本质上讲,开发人员发现很难使用JavaScript编写与Microsoft旗舰产品相当的应用程序。 因此,他们开发了TypeScript,以使其更易于构建可在JavaScript环境中运行的企业级应用程序。 这是TypeType 官方项目站点上的语言标语的精神:“可扩展JavaScript”。
为什么TypeScript在这种工作上比普通JavaScript更好? 好吧,我们可以永远争论一下面向对象编程的优点,但是现实是,许多从事大型企业项目的软件开发人员已经习惯了它,并且随着项目规模的扩大,它有助于代码重用。 您也不应该忽略工具可以在多大程度上提高开发人员的生产力。 如前所述,大多数企业IDE支持后台增量编译,可以在工作时发现错误。 (只要您的代码在语法上是正确的,它仍然可以进行翻译,但是生成JavaScript可能无法正常工作;将错误检查等同为拼写检查。)这些IDE还可帮助您在深入学习代码时重构代码。项目。
简而言之,当您想要Java之类的语言的企业功能和工具,但需要在JavaScript环境中执行代码时,可以使用TypeScript。 从理论上讲,您可以编写TypeScript编译器自行生成的标准JavaScript,但是这将使您花费更长的时间,并且对于大型团队来说,集体理解和调试代码库变得更加困难。
哦,TypeScript还有另外一个巧妙的窍门:您可以将编译器设置为针对特定JavaScript运行时环境,浏览器甚至语言版本。 由于任何格式正确JavaScript代码也都是TypeScript代码,因此,例如,您可以采用写入ECMAScript 2015规范的代码,其中包括许多新的语法功能,然后将其编译为与旧版本的兼容JavaScript代码。语言。
准备开始使用TypeScript玩了吗? 安装语言很容易。 如果您已经在开发计算机上使用Node.js,则可以使用NPM(Node.js程序包管理器)进行安装。 5分钟内的官方TypeScript教程将引导您完成此过程。
TypeScript也可以作为您选择的IDE的插件安装,这将为您提供上面我们所讨论的工具优势,并且还会处理将TypeScript编译为JavaScript的过程。 由于TypeScript是由Microsoft开发的,因此可以为Visual Studio和Visual Studio Code提供高质量的插件就不足为奇了。 但是,作为一个开放源代码项目,TypeScript已得到无处不在的适应,从像Eclipse这样的开源IDE到像Vim这样的古老文本编辑器。 整个项目可以从GitHub浏览和下载。
一旦安装了TypeScript,就可以开始探索了,这意味着了解TypeScript语法的基础。 由于JavaScript是TypeScript的基础,因此在开始之前,您需要熟悉JavaScript。 毫无疑问,您的主要兴趣点将是使该语言独特的TypeScript特定功能。 我们将在此处探讨重点。
显然,TypeScript中最重要的语法功能是类型系统。 该语言支持多种基本类型 :
`
)将字符串括在多行中,并且可以使用${ expr }
语法将表达式嵌入字符串中。 forEach()
方法用于在数组中的每个元素上调用函数。 有两种不同的方式将类型明确分配给变量。 第一个是尖括号语法:
let someValue: any ="this is a string";
let strLength: number = (someValue).length;
第二是as
语法:
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
这些代码片段(来自TypeScript文档)在功能上等效。 两者都将someValue
定义为any
类型的变量,并为其指定"this is a string"
作为值,然后将strLength
定义为数字,并为其指定someValue
内容的长度。
TypeScript类型也可以通过推断来设置。 也就是说,如果在不建立x类型的情况下将x的值设置为7,则编译器将假定x应该是数字。 在某些情况下,编译器可以推断any
类型,尽管您可以使用编译标志来确保不会。
TypeScript类型系统非常丰富,已经超出了本文的范围。 有许多高级和实用程序类型。 其中包括并集类型 ,它们使您可以确定变量将是几种指定类型之一,而映射类型则是可以根据现有类型创建的类型,在其中您可以将现有类型中的每个属性转换为相同类型方式。 例如,您可以为一个变量创建一个联合类型,该变量可以是数字或布尔值,而不是字符串或其他任何东西。 或者您可以创建一个映射类型,将数组中的所有元素设置为只读。
与大多数面向对象的语言一样,TypeScript具有接口,该接口允许用户定义自己的类型。 接口建立对象所具有的属性以及与这些属性相关联的类型。 TypeScript接口可以具有可选属性。 有关语法的更多信息, 请查看TypeScript文档 。
TypeScript还与Java和C#等面向对象的语言共享泛型的概念。 (C ++中的等效功能称为模板。)在TypeScript中,通用组件可以在多种类型上工作,而不仅仅是一种类型,具体取决于这些组件在代码中的调用位置。 这是TypeScript文档中的一个非常简单的示例 。 首先,考虑以下函数,该函数接受一个参数,然后立即返回它:
function identity(arg: any): any {
return arg;
}
由于该函数是使用any
类型定义的,因此它将接受您选择向其抛出的任何类型的参数。 但是,它返回的将是any
类型。 这是使用泛型的函数版本:
function identity(arg: T): T {
return arg;
}
该代码包含类型变量 T
,该变量捕获传入参数的类型并将其存储以备后用。
泛型还有很多,这是使大型企业项目中的代码重用成为可能的关键。 有关详细信息,请查看TypeScript文档 。
在面向对象的编程中, 类继承了功能,并依次充当对象的构建块。 传统上,JavaScript不使用类,而是依靠函数和基于原型的继承,但是该概念已作为标准ECMAScript 2015版本的一部分添加到了语言中。 类已经是TypeScript的一部分,现在TypeScript使用与JavaScript相同的语法。 TypeScript编译器的好处之一是,它可以将带有JavaScript类的代码转换为符合2015年之前标准的旧式JavaScript代码。
有许多方法和对象可用于在TypeScript中获取和设置日期和时间,这些方法和对象大多是从JavaScript继承的。 JavaTPoint具有良好的工作原理 。
准备更深入了吗? 掌握这些TypeScript教程的最新知识:
如果您想学习如何将TypeScript与React结合使用,Facebook开发的用于构建UIJavaScript库,请查看Ross Bulat的《 如何将React与Redux结合使用TypeScript》以及 TypeScript文档中有关React和Webpack的部分 。 学习愉快!
翻译自: https://www.infoworld.com/article/3538428/what-is-typescript-strongly-typed-javascript.html