你还没有与 JavaScript 结婚,无论你有多喜欢它,你都必须尝试一下 TypeScript。也许你没有理由搬家,但我会带你踏上一段旅程,让你想尝尝 TypeScript。我可以给你超过 13 个理由为什么你应该转向 TypeScript,但现在,我将尝试用 5 点来说服你转向 TypeScript,其中我会告诉你为什么 TypeScript 比 JavaScript 更适合开发,并且为什么你应该为你的下一个项目选择 TypeScript。
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;
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中文网其他相关文章!