什么是TypeScript—初学者指南

136 阅读8分钟

几周前,我发表了《Intermediate TypeScript and React Handbook》

它收到了很多人的意见,我也收到了几封邮件。大多数是 "感谢 "的邮件,但也有其他邮件,比如。

"......我是编程新手,TypeScript是什么?"

还有:

"感谢这本免费电子书,但作为初学者,我应该如何学习TypeScript?"

我在一开始就解释过,这本手册是为已经知道一些TypeScript的中级开发人员准备的--但这何时能阻止任何人下载免费资源呢!?:)

所以在本指南中,我决定用我希望在学习TypeScript时拥有的文章来回答这些邮件中的疑问。

现在,如果你还在阅读,我将假设你是TypeScript的初学者。

系好安全带,你将会有一段有趣的旅程。

像5岁时那样解释TypeScript

我的教学方法始终如一:

如果你不能向5岁的孩子解释,那么也许你对这个主题的了解还不够深。

与其用大量的技术术语来压制你,我们不如尝试一些不同的东西。

让我们用一个你永远不会忘记的比喻。

你上次去杂货店是什么时候?

考虑一下TypeMart。

image-134

The TypeMart杂货店

TypeMart是你典型的杂货店。

你想在工作之余拿起各种杂货?他们已经帮你解决了。

另一方面,这里有JMart。

image-135

JMart杂货店

JMart是一家小型杂货店,适合快速采购。

在我居住的柏林,我们称之为[Spätis](allaboutberlin.com/glossary/Sp…

但我相信你不是来上德语课的。

对我们来说,重要的是杂货店,JMart和TypeMart是如何运作的。

JMart和TypeMart是如何工作的

JMart,你进入商店,找到你需要的杂货,然后拿过去给收银员:

image-136

走到收银台付账

在这一点上,你不太清楚你所挑选的日用品的价格是多少。

好吧,这就是为什么你要到收银台去的原因

收银员拿着你的物品,扫描它,并告诉你它的价格。

如果他们的工作做得 "更好",他们会根据自己的想法(或他们放在抽屉里的一些手册目录)来告诉你这个物品的价格。

image-137

收到收银员的账单

这个过程似乎很脆,但孩子们却很好用!

这些收银员聪明得很。没有任何项目是不允许的。而且他们知道每件物品的价格。

在一个美丽的星期二,你决定去试试TypeMart

你很快就意识到,在TypeMart,事情是不同的。

"那些讨厌的大商店,"你可能会说。

与JMart不同,他们对店里的每样东西都有价格标签:

image-139

一篮子带价格标签的水果

他们剥夺了你的兴奋感和收银员计算账单时的表情。

另一方面,它们给你的是某种保证。

没有惊喜!你知道你的每件物品的价格。

你清楚地知道你买的每件东西的价格。

这对你钱包拮据的日子很有利。

每一分钱都很重要。

为什么这个比喻很重要?

你的直觉是正确的:

image-140

JMart代表JavaScript。Typemart,TypeScript。

在这个比喻中,JMart代表JavaScript,TypeMart代表TypeScript。

当你去超市的时候,有一个不成文的合同:他们承诺以合理的价格提供你需要的东西。

而你承诺为你所买的东西付钱(除非你在商店里偷东西,否则不要这样做)。

代码也是如此。

这是一个不成文的合同,但却是一个清晰而残酷的合同。

你的合同是与你的应用程序的用户签订的。而你承诺你的应用程序是有效的。

考虑一个像Google meet这样的电话会议应用的例子:

image-141

谷歌会议的网络界面。来源:shrtm.nu/L0yk

Google meet的承诺是你总是能够进行视频通话。他们还承诺,当你和你的伙伴聊天或快速观看TikTok时,你可以将按钮静音。

好在他们听不到你的声音!

或者你是这么想的?

想象一下,如果这个静音按钮没有做到它所承诺的那样。

你的秘密就会消失。而你对谷歌的信任也随之消失。

你写的应用程序也是如此。

你承诺一个可以工作的应用程序,而你的用户相信这是事实--假设你已经赢得了他们的信任。

现在让我们把这个问题带回家。

在JMart和TypeMart中,货物是金钱。对于软件,货物是数据。

假设你有一个基本的计数器应用程序:

image-142

一个基本的计数器应用的用户界面

你的用户看到的是一个花哨的用户界面,但在引擎盖下,真正创造奇迹的是你增加或减少的计数器变量

通过JMart(类似于JavaScript),商品没有被贴上标签(价格标签)。你不知道任何东西要多少钱。你到收银台去迎接你的命运。

这类似于JavaScript的工作方式。

你定义和操作各种变量,但没有明确的标签说明这些变量是什么。

你相信你所写的东西,并把它传递给JavaScript编译器,以迎接你的命运。

考虑一下下面这个微不足道的JavaScript代码:

const JMart = {
    bananas: true,
    apples: true,
    mangos: true
}

在一个标准的JavaScript应用程序中,你可以去写以下内容:

const myOrder = JMart.cars.price

尽管cars ,但在JMArt 对象上并不存在,也没有明确的标签来定义。

所以,在你写代码的时候,你可能不知道这行代码是有问题的......直到你去收银台迎接你的命运。

这里的收银员是指JavaScript解释器。通常情况下,当你在浏览器中运行代码时就会发生这种情况。

如果你这样做,你就会得到一个错误,内容是:can't read price of undefined

如果你把这段代码(错误地)运到生产中,你的用户也会遇到这个丑陋的错误。

你刚刚损害了他们对你的应用程序的信任。

有了TypeScript,情况就不同了。每一块数据都被 "标记 "了,就像在TypeMart中一样。

在你去收银台(也就是浏览器)运行代码之前,你可以知道你的应用程序是否在正常工作

TypeScript编译器会抛出一个错误,让你知道你在访问一个不正确的值时犯了一个错误。

这发生在你的代码编辑器中,在你用浏览器打开应用程序之前。

就像在TypeMart买一件你买不起的杂货,你看到了价格标签。

你知道你的钱包里有什么。可以说,你已经被警告过了。

这就在这里,是你应该知道的TypeScript和JavaScript之间的主要初步区别。

TypeScript是带有类型语法的JavaScript。

在这里,类型是围绕着你的杂货(数据)的标签,告诉你每一段代码到底代表什么。

考虑一下下面这个微不足道的JavaScript例子:


const myFunction = (a, b) => {
   return a * b
}

在TypeScript中,这段代码可能看起来像这样:

const myFunction = (a: string, b: string) => {
	return a * b
}

请注意,这看起来与JavaScript的代码几乎一样。

但它有一个主要的区别:数据ab'labelled'

image-143

类型函数的参数类型注释

这段代码特别指出,ab 中预期的myFunction 是字符串。

有了这些信息(称为类型注释),TypeScript现在可以在你写代码时显示错误。

image-144

在TypeScript操场上查看这段代码:shrtm.nu/FlC0

这些错误通常会以红色斜线的形式呈现。类似于Microsoft Word等应用程序中的错误。

然后你可以将鼠标悬停在这些线条上,查看错误的细节。

image-145

TypeScript错误的细节

在这个简单的例子中,错误的关键是乘法运算不应该在字符串上运行。

非异常错误

如果你是一个更有经验的JavaScript开发者,你已经可以注意到上面的代码例子在标准JavaScript中没有抛出错误:

const myFunction = (a, b) => {
    return a * b
}

如果你在JavaScript中计算“1” * "6" ,你会得到6

在内部,JavaScript将字符串强制转换成数字,并执行乘法运算。

这些在JavaScript中不会失败,但在TypeScript中出错的错误,被称为非异常错误。

这些都是为了帮助你防止你的应用程序中出现讨厌的错误。

在你的TypeScript之旅的这个阶段,你不一定要担心这个问题,但它值得一提。

正如你所看到的,TypeScript在帮助你捕捉代码中不需要的行为方面走得更远。

解决这个问题的一个简单方法是明确地输入参数,也就是说,ab 作为数字。

const myFunction = (a: number, b: number) => {
   return a * b
}

这样就不会出现错误了。

不要因为Typescript让你注意到这些非异常错误而责备它。

它们是你的应用程序中潜在的错误来源。

Typescript来拯救💪🏽

总结

问问自己,我现在知道TypeScript是什么了吗?

是的,你知道了--从概念上来说。

TypeScript对于JavaScript来说,就像TypeMart对于JMart一样。

TypeScript给你提供了一种有组织的方式来标记你的应用程序中的数据,以防止未知的错误。

这些错误将在你去收银台之前被发现并提请你注意--也就是说,在你运行你的应用程序之前。

花点时间来消化这些信息。在你学习更多TypeScript时,这将是至关重要的。

给自己拍拍胸脯,然后去写你的第一个TypeScript应用程序。