TypeScript与JavaScript:你应该知道的区别

2023-05-26 0 941

原副标题:TypeScript与JavaScript:你假如晓得的差别

译者 | 天猫云合作开发人员-天猫零售业 杨冰

译自 Radix 中文网站的该文,书名镜像:https://radixweb.com/blog/type-vs-java,书名译者:Nihar Raval

TypeScript与JavaScript:你应该知道的区别

已经开始找寻训练有素的 Java 合作开发工程项目组来将您的应用领域创意设计转变成现实生活?做为一位合作开发人员,假如您有良机参予 Web 合作开发项目,您很大介绍 Java 的组织工作基本原理。Java 挂牌上市十多年,已正式成为合作开发人员街道社区中盛行的JavaScript。

但正像他们知晓,假如一类控制技术或词汇已经开始兴起,协进会有另一类优先选择步入市场并与领跑者进行惨烈市场竞争。这儿有一个捷伊竞争对手 ——Type。随著 Type 的日渐普及化,他们能将其视作具备附加机能的 Java 修改版。

谈及 Type,它是一类用作合作开发小型繁杂插件的开放源码编程词汇。Type 由信息控制技术巨擘众所周知 —— 谷歌 —— 于 2012 年合作开发,其建立另一面的或者说其原因是处置小型插件。

除此之外,Angular 还采用 Type 进行 Web 合作开发服务工程项目。依照此项科学研究,Type 和 Java 依次是合作开发人员期望采用的第三和第三大盛行词汇。你晓得为何吗?

事实上,Java 被认为是插件和页面的主要JavaScript。因而,那时,他们能将 Java 用作 TezJS 、React 等后端架构,和 Node.Js 和 Deno 架构的后端。

但那时或者说的难题是,Java 是为建立小型繁杂的 Web 插件而合作开发的吗?我想答案是否定的!

在本文中,他们将比较这两种编程词汇 ——Type 与 Java,它们之间的关系,它们的区别,并概述每种词汇的优点。

但在此之前,在此视频中快速介绍 Type 和 Java 之间的差异。

TypeScript与JavaScript:你应该知道的区别

Type 与 Java:或者说的差别

假如他们同时考虑两者 ——Type 与 Java,那么每个 Java 代码在 Type 中都是有效的。这意味着 Type 是 Java 的超集。

换句话说,他们能说,

Java + 更多机能 = Type

因而,假如您将 Java 编程文件 (.js) 保存为 Type (.ts) 扩展名,它将执行得非常好。但这并不意味着这两种词汇 ——Type 和 Java 是一样的。

因而,在进一步深入之前,让他们先介绍一下每种词汇的基本定义。以下是来自 Google Trends 的数据,显示了这两种后端词汇过去一年的搜索趋势。

TypeScript与JavaScript:你应该知道的区别

为何在有 Java 的情况下合作开发 Type?

Java 词汇是做为客户端编程词汇引入的。但是随著 Java 在 Web 合作开发中的采用,合作开发人员介绍到它也可以被视作一类服务工程项目器端编程词汇。

然而,Java 代码也变得相当繁杂和沉重。因而,Java 无法满足面向对象编程词汇的期望。因而,Java 永远不会做为服务工程项目器端控制技术在业界蓬勃发展。这就是为何 Type 词汇诞生来弥合这一差距的其原因。

什么是 Type?

假如被问到 “什么比 Java 更好?”,您很大会得到答案 ——Type。

Type 由 Microsoft 合作开发和维护,是一类面向对象的开放源码编程词汇。它是 Java 的超集,包含可选类型。除此之外,它还能编译为纯 Java。

简而言之,Type 是一类静态编译的编程词汇,用作编写清晰简洁的 Java 代码。它实现与 Java 相同的目的,可用作客户端和服务器端插件。除此之外,Java 的库也兼容 Type。

TypeScript与JavaScript:你应该知道的区别

Type 是一类同时支持动态类型和静态类型的编程词汇。它提供类、可见性范围、命名空间、继承、联合、接口和许多其他特性。除此之外,它还提供注释、变量、语句、表达式、模块和函数。

您能在 Node.Js 或任何其他支持 ECMA 3 或其最新版本的浏览器上执行它。

由于 Type 是 Java 的修改版本,因而 Java 的所有代码在语法上都是有效的 Type。但是,这并不意味着 Type 编译器能处置所有 Java:

leta =a;a =1;// throws: error TS2322: Type 1is not assignable to typestring.

Type 提供的文件能包含来自当前目标文件的类型数据,类似于 C++ 头文件如何定义当前目标文件的建立。因而,其他插件能采用文件中定义的值,就像采用静态类型值的 Type 实体一样。

您还会找到盛行库(如 jQuery、D3.js 和 MongoDB)的第三方头文件。还有用作 NodeJs 基本模块的 Type 标头,允许在 Type 中进行 Node.Js 合作开发。

Type 的编译器是在 Java 中组装并用 Type 编写的。它在 Apache License 2.0 下注册。

看完 Type 介绍后,您很大想晓得将静态类型添加到 Java 的目的是什么?

好吧,他们能用给定的陈述来澄清你的疑虑:

您能避免隐藏忍者错误,例如经典的 “未定义” 不是函数。

易于重构代码而不会显着破坏它。

在大规模、繁杂的系统中定位自己不再是一场噩梦。

依照此项科学研究,Type 识别出大约 15% 的 Java 错误。

动态类型的自由性经常导致错误,这不仅降低了合作开发人员的效率,而且由于添加新代码行的开销增加而使合作开发变得很费劲。

因而,由于缺乏类型和编译时错误检查,Java 对于组织和小型代码库中的服务器端代码来说是一个糟糕的优先选择。

正像他们的标语所暗示的那样,Type 是可扩展的 Java。

为何他们需要采用 Type?

正像他们之前所说,Type 是 Java 的修改版。因而,在将它与 Coffee(添加了语法糖)或 Pure(与 Java 完全不相似)等其他词汇进行比较时,编写 Type 代码需要学习很多东西。

TypeScript与JavaScript:你应该知道的区别

在 Type 中,类型是可选的,任何 Java 文件都是有效的 Type 文件。虽然假如您的任何初始文件存在类型难题,编译器会通知您,但它仍会提供一个有效的 Java 文件。Type 将不负众望,随著时间的推移提高您的技能也很简单。

Type 适合后端还是后端?

由于 Type 被编译为 Java,因而它适用作插件合作开发的后端和后端。

除此之外,Java 是页面和插件后端的首选编程词汇。因而,出于同样的其原因,可能会采用 Type,但它在服务工程项目器端也适用作繁杂的小型企业工程项目。

但是,您也能采用其他顶级后端架构(如 React、Angular、Vue)来构建下一代插件。

Type 的类型

Type 包含各种基本类型,例如 Number、Array、Tuple、Boolean、String 等等。好吧,其中一些类型在 Java 中不可用。但是,您能在 Type 文档中介绍有关它们的更多信息。

除此之外,下面是一些其他类型,它们是 Type 的表现力:

Any & Unknown

一个名为 Any(任何你想要的)的类型能覆盖 unknown 是它的类型安全系统。在这儿,any 允许您在想要转义类型系统时分配和 Java 变量。它广泛用作描述尚未验证且类型未知的传入变量(例如,来自第三方 API)。

Unknown 类似于 Any,但它不允许您对它执行任何操作,除非它已明确进行类型检查。

Void

当没有返回值时,采用 Void。一般用作不返回任何函数的返回类型。

Never

Never 是不假如发生的事情的返回类型,例如异常抛出函数。

Intersection & Union Types (交集和并集类型)

这些类型允许您依照逻辑建立自定义类型。

交集类型让您能将几种基本类型组合成一类类型。例如,假如他们建立一个自定义类型 Person,它包含first_name:string一个 last_name:string. 好吧,你能这样说:我期望我的类型 是这样且那样的

联合类型允许您输入各种基本类型众所周知。例如,假如有一个返回result:stringor undefined,您能这样说:我期望我的类型 是这个或那个

当您将它们视作空间时,所有这些类型都有意义。

TypeScript与JavaScript:你应该知道的区别

Type 同时支持隐式和显式类型。假如您不显式编写类型,编译器将启用类型推断来识别您已经开始采用的类型。

另一方面,明确编写它们会带来好处,例如协助其他工程项目组成员阅读您的代码并验证您所看到的是编译器所看到的。

Type 的特点

借助 Type 的高级特性,它支持 Java 的附加特性,例如面向对象的编程概念、JS 库、平台无关性等。

Compatibility(兼容性)

Type 也支持旧的和捷伊附加机能。但是,它兼容所有版本的 Java,例如 ES7 和 ES12。它能将 ES7 中的完整代码编译回 ES5,反之亦然。这确保了平稳过渡和词汇可移植性。

Static Typing(静态类型)

静态类型意味着合作开发人员必须声明变量类型。

假设他们取变量名 str。代码将不会运行,直到您给它一个类型,例如 Integer、Float、List 或任何其他类型。而 Type 是静态类型的。

静态类型能帮助您及早检测错误、更快地完成代码等等。

那时,让他们在这儿为您提供其他突出的特点:

它易于维护并可提高工程项目生产力。

能采用静态类型和注释

支持面向对象的特性,例如接口、继承和类

调试简单,难题及早发现。

支持 ES6 (ECMA),它为处置对象和继承提供了更简单的语法。

全机能 IDE 支持

Type 的优点

Type 提供了多种优势,能帮助您为 Web 合作开发编写更好的编程词汇。

Language Features(词汇特性)

以下是 Type 支持的其他功能。

命名空间

接口

空检查

泛型

访问修饰符

Optional Parameters(可选参数) // — Type — //

functionlog( message: string= null) { }

// — Type compiled output — //

functionlog( message) {

if(message === void0) { message = null; }

}

// — Java with Babel — //

functionLog( message = null) { }

// — Babel compiled output — //

“use strict”;

functionLog{

varmessage = arguments.length > 0&& arguments[ 0] !== undefined? arguments[ 0] : null;

} Classes Class 方式// — Type — //

classArticle {

name: string;

constructor( name: string) {

this.name = name;

}

}

// — Type compiled output — //

varArticle = /** @class */( function{

functionArticle( name) {

this.name = name;

}

returnArticle;

});

// — Java with Babel — //

classArticle{

constructor(name) {

this.name = name;

}

}

// — Babel compiled output — //

“use strict”;

function_classCallCheck( instance, Constructor) { if(!(instance instanceofConstructor)) { thrownewTypeError( “Cannot call a class as a function”); } }

varArticle = functionArticle( name) {

_classCallCheck( this, Article);

this.name = name;

}; 什么是 Java?

Java – 一类JavaScript,用作合作开发交互式页面。它遵守客户端编程规则;因而,它能在用户的网络浏览器中无缝执行。但是,您能将 Java 与其他控制技术(如 XML 和 REST API)结合采用。

JS 的主要目的是使其正式成为一类互补的JavaScript,类似于 Visual Basic 之于 C++。但是,Java 不适合小型繁杂插件。它旨在为一个插件只编写几百行代码。

以下是 Java 提供的一些独特机能:

灵活、动态和跨平台

它能用作客户端和服务工程项目器端

轻量化解读

所有浏览器都支持

弱类型

即时编译

Type 和 Java 之间的差别

Type 和 Java 之间的差别

在比较两种编程词汇 ——Type 和 Java 时,他们必须考虑许多因素,如下所示:

1) 学习曲线

Type 是 Java 的超集。要编写 Type 代码,您假如对 Java 有基本的介绍和知识。除此之外,您还假如清楚 OOPS 的概念。

另一方面,Java 是一类盛行且易于学习的JavaScript。许多合作开发人员将 Java 与 CSS 和 HTML 结合采用来建立 Web 插件。然而,HTML 很难,因为它包含事件处置、Web 行为、动画和脚本。

2)合作开发人员街道社区

Type 在短时间内盛行起来,并被许多企业实施。您会在 Internet 上找到许多学习 Type 的教程和指南。但是,它有一个非常活跃和支持的街道社区。

另一方面,与 Type 相比,Java 没有庞大的街道社区。Java 提供了许多库、架构和代码实践。因而,建议您介绍最适合您的业务需求的 Web 合作开发工程项目组结构,以获得整体工程项目组绩效。

3)性能

众所周知,建立 Type 是为了克服 Java 对小型繁杂插件的挑战。因而,Type 节省了合作开发时间并让合作开发人员变得更有效率。

Type 和 Java 之间的唯一差别是 Type 代码在执行之前被编译成 Java。

4) 语法

Type 提供了 Java 不提供的变量声明、函数范式和类型系统。它在语法方面类似于 J 和 .Net,支持 ECMA 2015 标准机能,包括模块、箭头函数语法和类。

Java 也遵循 ECMA 定义。但是,它不是像 Type 这样的类型化词汇。它采用许多来自 C 词汇的结构化编程术语,例如 if 语句、switch 语句、do-while 循环等等。它提供事件驱动风格、函数式和命令式编程。

5)工具和架构

由于谷歌支持 Type,它拥有许多领先的架构和编辑器。通过与编辑器的紧密集成,它提供了编译期间的错误处置,以避免在运行时出错。

另一方面,市场上有许多 Java 架构可用作 Web 合作开发工程项目需求。这是一个非常受程序员欢迎的巨大生态系统。您能快速找到精通 ReactJS、VueJS、Angular 和其他架构的合作开发人员。

6)代码

对于 Type:

classPerson

{

privatename: string;

constructor( privatename: string)

{

this.name = name;

}

name

{

return“name is“ + this.name;

}

}

对于 Java:

varPerson = ( function

{

functionPerson( personName)

{

this.name = personName;

}

Person.prototype.name= function

{

return“My name is “+ this.name;

}

returnPerson;

}); Type 与 Java 有何不同?

他们晓得 Type 提供的机能比 Java 多。简而言之,Type 是一类面向对象的编程词汇,而 Java 是一类JavaScript。因而,Type 通过 ES6 特性提供接口和模块;另一方面,Java 不提供此类机能。

事实上,一些合作开发人员可能会混淆面向对象和函数式编程词汇。但是,您能在这儿区分函数式编程与面向对象的编程词汇,并介绍它们之间的差别。

为何要将您的项目迁移到 Type?

假如您有一个庞大而繁杂的代码库,则发生错误的可能性更高。但是,假如能在编译期间解决了一些错误,那就太好了。这时你能采用 Type 来减少编译时的错误。最好的部分是完整的 Java (此处假如是译者笔误,假如是 Java)代码库能按原样重用。

何时优先选择:Java 和 Type 的差别Type

编译时类型检查 采用 Vanilla Java,类型验证在运行时执行。然而,这会增加运行时开销,这能通过进行编译时验证来避免。 小型工程项目或多个合作开发人员 Type 能在小型工程项目或许多合作开发人员一起组织工作时无缝运行。 易于采用新库或架构 假设,假如你已经开始采用 React 进行合作开发并且不熟悉它的 API,你能获得 语法提示来帮助你识别和导航新界面。但是,它们都提供类型定义

Java

小工程项目 对于代码较少的小型工程项目,Type 可能有点矫枉过正。 架构支持 假如 Type 不支持您优先选择的架构 – 例如 EmberJS,那么您可能无法利用它的机能。 构建工具 要生成能运行的最终 Java,Type 需要有一个构建的步骤。不过,在不采用任何构建工具的情况下合作开发 Java 应用领域正变得越来越少。 测试组织工作流程 假如您优秀的 Java 合作开发人员已经在采用测试驱动合作开发,那么切换到 Type 的好处可能不足以证明迁移成本是合理的。 我假如学习 Java 还是 Type?

假如你介绍 Java,那么你就很容易理解 Type。它们两种词汇共享相同的语法和运行时行为。

做为最盛行的词汇,Java 提供了许多资源和庞大的合作开发人员街道社区。由于两种词汇在很多情况下都以相同的方式执行,因而 Type 合作开发人员也能从这些资源中受益。

Type 相对于 Java 的优势

Type 支持静态类型。这意味着静态类型允许在构建时检查类型的准确性。

在合作开发时,Type 会识别编译错误。因而,运行时评估错误的范围非常小。另一方面,Java 是一类解释型词汇。

Type 只是具备一些附加机能的 JS,即 ES6 机能。TS 编译器能将 .ts 文件编译成 ECMA,尽管它可能不会保存在您优先选择的 Web 浏览器中。

Type 会取代 Java 吗?

那么,上述难题的最短答案是否定的!

在谈论 Type 时,它是一类完全不同的词汇,只是它继承了 Java 的基本性质。因而,Java 永远也不会被取代。

Java 是软件合作开发行业中盛行的基础控制技术众所周知,被大量合作开发人员用作客户端和服务工程项目器端。

另一方面,Type 不直接在 Web 浏览器中执行。它转译为 Java。Java 更容易调试和编译,因为它直接在 Web 浏览器中执行。然而,Type 并不是为所有类型的工程项目合作开发的。因而,两种编程词汇都有其优点和缺点和一组特征。为了顺应企业 Web 发展趋势,您必须采用新控制技术或架构来获得更好的业务流程和客户体验。

正面比较:Type 与 Java

Type 和 Java 在合作开发交互式页面方面有许多相似之处。在提供 Type 与 Java 的直接比较时,他们能说 Java 是一类轻量级的解释型动态词汇,用作增强 HTML 页面。另一方面,Type 是 Java 的修改版。这意味着 Type 是 Java 和其他一些特性的组合。

Type 是由 Microsoft Corporation 合作开发的一类面向对象的编程词汇,而 Java 是用作 Web 的编程词汇。

Type 是一种用作构建小型 Web 插件的开放源码词汇,而 Java 是一类有助于合作开发交互式页面的服务工程项目器端编程词汇。

另一方面,Type 是 Java 的修改版。这意味着 Type 是 Java 和其他一些特性的组合。

让他们介绍下表中 Type 与 Java 的重要差别。

范围 Type Java 合作开发人员 Microsoft in 2012 Brendan Eich (Netscape),1995 年 定义 Type 是一类强大的面向对象词汇,做为 Java 的超集,具备泛型和 JS 特性来解决 JS 的繁杂难题。 Java 是一类JavaScript,具备建立动态页面的一流机能。 类型 强类型。Type 支持静态类型和动态类型。 弱类型 。Java 仅支持动态类型。 生态 Type 更像是一类支持静态类型的强大而直观的词汇。 Java 是一类简单的词汇,它优化了代码的兼容性,易于阅读和编写。 编译 Type 需要编译。 Java 不需要编译。 数据绑定 Type 利用接口和类型等概念来定义所采用的数据。 Java 中没有这样的概念。 学习曲线 Type 有一条不友好的学习曲线。除此之外,它需要 Java 知识。 它易于学习并且是一类用作编写 Web 脚本的灵活词汇。 Npm 包 采用 Type,许多 npm 包要么有静态类型定义,要么有一个更容易安装的外部类型定义。 Java 提供了不需要任何构建步骤就能搜索和生成代码的替代方案。 客户端或服务工程项目器端 Type 专门用作客户端。 Java 用作服务工程项目器端和客户端。 文件扩展名 .tsx 和 .ts .js 街道社区 Type 有一个较小的软件合作开发人员街道社区。 Java 拥有庞大的软件合作开发人员街道社区。 原型设计 原型设计特性在 Type 中可用。 JS 不支持原型设计。 公司和中文网站 Asana, Clever, Screen award Airbnb、Codecademy、Instagram 代码示例 function multiply (a, b){ return a*b;}var result = multiply(a, b);console.log(答案是 – + result); <>function multiply (a, b){ return a\*b;}var result = multiply(a, b);document.write (‘The answer is – ’ + result);</>

结论

最后,在阅读了他们在本文中整理的所有见解之后,他们能说这两种词汇各有利弊。

Type 适合想要建立整洁干净的可读代码的合作开发人员。好吧,他们没有提到 Type 提供了什么,包括各种实时错误检查和静态类型。

虽然 Java 不是一种综合性的编程词汇,但它能与 HTML 一起采用来提高页面的质量。甚至,您会发现许多精通 Java 编码的训练有素的合作开发人员。

但是,与 Java 一样,并非所有 Web 浏览器都支持 Type。所以,假如你在 Type 和 Java 之间纠结,能参考上面的该文。

初次翻译,个人水平有限,有翻译不恰当的地方欢迎大佬们指正。

一周热点 | 2023.03.01-2023.03.07 谷歌开放源码 Service Weaver,编写分布式插件的架构Rust工程项目组内部斗争终平息:建立新领导委员会、权力下放、宣布捷伊治理模型草案

这儿有最新开放源码资讯、软件更新、控制技术干货等内容

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务