为什么你应该学习 TypeScript 而放弃 JavaScript? TypeScript 与 JavaScript
你还没有与 JavaScript 结婚,无论你有多喜欢它,你都必须尝试一下 TypeScript。也许你没有理由搬家,但我会带你踏上一段旅程,让你想尝尝 TypeScript。我可以给你超过 13 个理由为什么你应该转向 TypeScript,但现在,我将尝试用 5 点来说服你转向 TypeScript,其中我会告诉你为什么 TypeScript 比 JavaScript 更适合开发,并且为什么你应该为你的下一个项目选择 TypeScript。
严格类型化 JavaScript
TypeScript 只是一个严格类型化的 javascript。我讨厌 JavaScript 的原因之一(是的,我讨厌它)是这种语言有太多的灵活性,没有任何规则和规定,你可以写任何废话,它不会给你一个错误(例外是有的) ,例如,如果你创建了一个变量并给它一些数字作为值,比如6,稍后你可以将一些函数分配给同一个变量,甚至可以调用该变量,这对我来说有点有趣,无论如何,让我们看看是什么TypeScript 与它。
在 typescript 中,定义变量时,必须写出它的类型,就像变量将存储数字、数组、字符串或其他任何内容一样。一旦你这样做了,你就不能在其中存储任何其他东西,否则 TypeScript 不会让你继续,而 TypeScript 对此很严格。
let age: number; age = 25;
即使你没有提及变量的类型并为其分配一些值,它也太聪明了,它会自动从给定的值中找出类型并记住它。
let age = 10; age = "Donald Trump" ~~~ // Type '"Donald Trump"' is not assignable to type 'number'.(2322)
如果你了解像 C/C 这样的语言,那么类型被定义为 int Age;类似地,在 TypeScript 中,我们在冒号后的变量名称后定义类型,例如 letage:number;。这样我们就可以在不改变 JavaScript 语法的情况下填充 TypeScript。这就是我一开始告诉你的,TypeScript 不仅仅是 JavaScript,只有类型。我不会关注 typescript 的语法,它不在本文的讨论范围内。
现在,如果是 JS,你可以对年龄做任何事情,比如你的名字,或者一些数组,甚至一些函数,但在 TS 中,一旦它作为数字诞生,它将仍然是一个数字,没有别的。如果你这样做,它会立即给你一个错误,但在 JS 中,只要你不做非法的事情,它就会容忍它,比如调用age而不给它分配一个函数或访问 .length 属性。一个函数。
起初,你可能觉得从 JS 切换到 TS 不值得,但是一旦你完全理解它,你就不会因为这个功能而想用 JS 编写代码。
因为你需要错误。
当我说你需要错误时,并不意味着我希望你编写错误的代码,而是你编写的代码必须是无错误的,为此,你的开发环境有责任为你提供错误。而在 JS 中,它只是不这样做,这是人们喜欢它的原因之一,同时也讨厌它。当我说错误时,我指的是除语法错误之外的所有错误。当你写错东西时,JS 不会报错,但当发生错误时,它会给你报错。因此,如果您的代码的某些部分在测试时未执行,那么请准备好应对生产中的一些痛苦。 :)
让我们看一个例子
我正在编写一个代码来将两个数字相乘,我将在 JS 和 TS 中执行此操作,您将看到 JS 如此不可靠,并且可能会在很多方面破坏您的应用程序。
let age: number; age = 25;
你可以用任何方式调用multiply,没有任何限制,而且它总是会给你意想不到的结果,这是JS最糟糕的事情,假设现在你必须在某个地方使用这些返回值,这会导致多少不一致和意想不到的结果在您的应用程序中。
但是感谢TypeScript,它非常严格,如果你不遵守规则,它不会让你继续,如果函数期望的是,那么你必须传递数字,它说两者都应该是数字,然后你必须传递两个参数,并且都必须是数字。让我们看看 TypeScript 中的相同代码。如果您不了解 TS 语法,请不要担心,它与 JS 类似,只是返回类型位于左大括号之前,参数类型及其名称位于前面。
let age = 10; age = "Donald Trump" ~~~ // Type '"Donald Trump"' is not assignable to type 'number'.(2322)
所以在TS这里,从来没有不可预测的结果,只有排除所有错误才能继续,这就是让我爱上TS
TS 不仅会告诉您所编写的代码中的错误,而且还会告诉您错误可能出现在哪里的可能性。让我们看一个简单的例子。
function multiply (num1, num2 ) { return num1 * num2; } console.log(multiply(3, 4)); // returns 12 console.log(multiply(3)); // return NaN console.log(multiply(3, null)); // returns 0 console.log(multiply()); // returns NaN
现在如您所见,social 属性是可选的,这意味着可能存在 Social 未定义的情况,TS 知道这一点,并且在您处理它之前它不会让您继续。
function multiply (num1:number, num2:number) :number{ return num1 * num2; } console.log(multiply(3, 4)); // returns 12 console.log(multiply(3)); // ~~~~~~~~~~~ // Expected 2 arguments, but got 1.(2554) // input.tsx(1, 33): An argument for 'num2' was not provided. console.log(multiply(3, null)); // ~~~~ // Argument of type 'null' is not assignable to parameter of type 'number'. console.log(multiply()); // ~~~~~~~~~~~ // Expected 2 arguments, but got 0.(2554) // input.tsx(1, 20): An argument for 'num1' was not provided.
因此,这会被 JS 默默地忽略,并且会导致不同情况下的错误,这也是 TS 被认为更可靠的另一个原因。
自动测试并记录。
假设你正在使用某个用 JS 编写的库中的函数,你怎么知道你必须传递哪些参数?您将查看文档,检查它将采用哪些参数,哪些参数是可选的,然后调用该函数。但在 TS 中,不需要记录这一点,一切都由类型本身解释。即使它也确保您以正确的方式使用该函数,并且不传递任何随机参数。
例如,您可以参考上面的第二部分。
您可以采取的另一种情况是,假设您正在使用一个库,该库为您提供一个带有嵌套属性的 JS 对象,因此要检查属性的名称到底是什么,以及其中哪些可以是未定义的,这是一个很大的任务疼痛。您必须深入研究文档,或者有时通过控制台记录您的对象以查看它包含哪些内容。这确实是我讨厌的,我希望以某种方式,对象本身告诉您它包含哪些属性,以及某些属性是否未定义,或者属性是否具有值字符串、数字或数组或什么。嗯,愿望实现了,再次感谢 TypeScript。如果代码是用 TS 编写的,您将得到确切的行为。让我们看一个例子。
let age: number; age = 25;
现在要检查用户将拥有哪些属性,无需控制台记录它,也无需在添加 .在用户之后,它会自动为您提供其拥有的属性列表,并告诉您其中哪些属性未定义。见下图。
它还会通过检查所有可能性来自动测试您的代码,并告诉您是否有任何可能性失败。听起来棒极了,是的,确实如此。此功能可以防止开发时出现大量错误,您不需要为您的函数编写测试,也不需要在不同的值下手动测试它,TS 会为您做这件事,并告诉您是否遗漏了某些内容这可能会在以后引起问题。
在下面的代码中,我编写了一个函数,它接受两个参数,并通过将每个参数添加到数组(如果它们不是未定义的)来返回一个字符串数组。第一个参数是必需的,而第二个参数是可选的。
let age = 10; age = "Donald Trump" ~~~ // Type '"Donald Trump"' is not assignable to type 'number'.(2322)
上面的代码是我很容易犯错误的场景。 Array.push 不返回更新后的数组,而是返回数组的新长度。所以如果上面的代码是用JS编写的,不会有任何错误,我的代码只是运行并给出了预期的结果,我必须在这里调试并找到错误,如果我通过了,我的函数将返回2第二个论点也是。但在 TS 中,您可以清楚地看到 TypeScript 自动运行该情况,并告诉您在该特定情况下,您的函数将无法返回字符串数组。
还有另一个错误,如果您不传递第二个参数,您仍然不会返回任何内容(未定义),这也违反了函数的行为,因为它必须返回字符串数组。因此,在这里我对函数进行了一些更改,TS 给了您一个绿色标志,这意味着该函数永远不会给您带来意外的结果。见下文。
let age: number; age = 25;
始终领先 JavaScript 几步
Typescript 总是比 Javascript 领先几步。如果 JavaScript 中宣布了新功能,并且应该在下一个 ECMA 版本中发布,TS 会在正式发布之前发布它,您可以使用它而无需担心浏览器兼容性,因为您可以将 TS 编译到任何以前的版本JavaScript(如 ES5)。 TypeScript 具有许多 JavaScript 没有的功能。
所以我们可以说 TypeScript 也是 JavaScript、ECMA5、ECMA6、ECMA7 和 ECMAnext 的超集,以及一些 JavaScript 中甚至不存在的功能。
结论
是的,迟早你必须接受 TypeScript。你就是无法逃避它。每个用 JavaScript 编写的 npm 包也必须提供其类型,或者首选另一个支持 typescript 的包。现在,大多数大型库、包和框架都是用 TypeScript 编写的。
一开始,包也使用了 JavaScript,并且支持 TypeScript,但现在情况已经发生了转变,包使用了 TypeScript,并且支持 JavaScript。每个人都承认 TypeScript 相对于 JavaScript 的强大功能和需求,并接受它。
你永远无法学习 Angular,因为它迫使你只编写 TS 代码,与环回 4 的情况相同。NestJS 主要语言是 TypeScritpt,它们还提供对 JavaScript 的支持。以下是NestJs的话
我们热爱 TypeScript,但最重要的是 - 我们热爱 Node.js。这就是 Nest 与 TypeScript 和纯 JavaScript 兼容的原因。 Nest 利用了最新的语言功能,因此要将其与普通 JavaScript 一起使用,我们需要一个 Babel 编译器。
如果您对我给您的理由仍然不满意,并且有一些反问,您可以随时联系我们,相信我,值得一试,您不会后悔的。
以上是为什么你应该学习 TypeScript 而放弃 JavaScript? TypeScript 与 JavaScript的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。
