首页 >web前端 >js教程 >为什么你应该学习 TypeScript 而放弃 JavaScript? TypeScript 与 JavaScript

为什么你应该学习 TypeScript 而放弃 JavaScript? TypeScript 与 JavaScript

Barbara Streisand
Barbara Streisand原创
2024-11-15 00:53:02526浏览

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

严格类型化 JavaScript

Why you should learn TypeScript and ditch JavaScript? TypeScript vs 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 编写代码。

因为你需要错误。

Why you should learn TypeScript and ditch JavaScript? TypeScript vs JavaScript

当我说你需要错误时,并不意味着我希望你编写错误的代码,而是你编写的代码必须是无错误的,为此,你的开发环境有责任为你提供错误。而在 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 被认为更可靠的另一个原因。

自动测试并记录。

Why you should learn TypeScript and ditch JavaScript? TypeScript vs JavaScript

假设你正在使用某个用 JS 编写的库中的函数,你怎么知道你必须传递哪些参数?您将查看文档,检查它将采用哪些参数,哪些参数是可选的,然后调用该函数。但在 TS 中,不需要记录这一点,一切都由类型本身解释。即使它也确保您以正确的方式使用该函数,并且不传递任何随机参数。

例如,您可以参考上面的第二部分。

您可以采取的另一种情况是,假设您正在使用一个库,该库为您提供一个带有嵌套属性的 JS 对象,因此要检查属性的名称到底是什么,以及其中哪些可以是未定义的,这是一个很大的任务疼痛。您必须深入研究文档,或者有时通过控制台记录您的对象以查看它包含哪些内容。这确实是我讨厌的,我希望以某种方式,对象本身告诉您它包含哪些属性,以及某些属性是否未定义,或者属性是否具有值字符串、数字或数组或什么。嗯,愿望实现了,再次感谢 TypeScript。如果代码是用 TS 编写的,您将得到确切的行为。让我们看一个例子。

let age: number;
age = 25;

现在要检查用户将拥有哪些属性,无需控制台记录它,也无需在添加 .在用户之后,它会自动为您提供其拥有的属性列表,并告诉您其中哪些属性未定义。见下图。

Why you should learn TypeScript and ditch JavaScript? TypeScript vs JavaScript

它还会通过检查所有可能性来自动测试您的代码,并告诉您是否有任何可能性失败。听起来棒极了,是的,确实如此。此功能可以防止开发时出现大量错误,您不需要为您的函数编写测试,也不需要在不同的值下手动测试它,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 几步

Why you should learn TypeScript and ditch JavaScript? TypeScript vs JavaScript

Typescript 总是比 Javascript 领先几步。如果 JavaScript 中宣布了新功能,并且应该在下一个 ECMA 版本中发布,TS 会在正式发布之前发布它,您可以使用它而无需担心浏览器兼容性,因为您可以将 TS 编译到任何以前的版本JavaScript(如 ES5)。 TypeScript 具有许多 JavaScript 没有的功能。

所以我们可以说 TypeScript 也是 JavaScript、ECMA5、ECMA6、ECMA7 和 ECMAnext 的超集,以及一些 JavaScript 中甚至不存在的功能。

结论

Why you should learn TypeScript and ditch JavaScript? TypeScript vs 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn