在我们构建网页的广阔世界中,我们有机会讨论各种工具。我们努力用明确的技术方法来填补项目中的每一个空白。我们中的一些人获得了“在桌边就座”的机会,甚至可以参与最微不足道的技术辩论。这种意见市场建立在一种愿望之上,即至少在目前,要达到最佳状态。我们推测工具的使用,以便提高效率,扩展探索范围,或铺设通往可行性的最快路径。
如果你阅读过本网站上的任何内容,你可能已经意识到了“冒名顶替综合征”的概念——一种令人衰弱的反思,即你并不配拥有你所处的职位,或者你认为自己应该知道的知识。那些学会处理冒名顶替综合征的人有陷入(我对自己认识到的)“相关性综合征”的风险——这是冒名顶替综合征的中期职业并发症。当你花费数年时间重复“我应该在这里”的口号,但从未真正接受其前提时,就会发生这种情况。当你试图抵消硬技能的软化,却最终使软技能硬化时,就会发生这种情况。保持相关性当然是一个发表关于工具意见的好理由。
因此,我将随意地靠在这堵砖墙上,将我的墨镜滑到我那无比相关的鼻尖上,然后不以为然地提到,是的,我也学习了TypeScript。一年体验下来,我发现自己非常喜欢它。
我想利用 TypeScript 的目的来阐明一个单独的观点,所以如果你愿意,请耐心听我讲完这个快速示例。
TypeScript 除了其他功能外,还可以强制执行你传递的事物的类型。例如,这个 JavaScript 函数可以将两个数字相乘
const product = (x, y) => x * y;
想象一下,你违反了规则,在没有数字参数的情况下调用此函数,例如,product('A', 'B')
。你可以通过多种方式验证此函数以捕获此场景,但你的验证仅在执行时发生——脚本运行时,通常在浏览器中。你无法真正调试它,直到这些事件发生。TypeScript 可以做的是在你执行之前——在你编写代码时——告诉你你违反了规则。为此,你需要声明你正在使用的类型。
const product = (x: number, y: number) => x * y;
在这里,我们为这两个参数指定了类型,表示变量x
和y
都是number
。现在,如果你使用错误类型的参数来使用此函数,你的应用程序脚本将响亮地构建失败。因为你的脚本必须在构建之前工作,所以你永远不必担心这类错误在实际环境中发生。但是,要实现这一点需要付出很多努力。你必须在所有地方定义你的类型。
😍
你可能会发现编写 TypeScript 类型就像整理书架一样。你设定了一些规则,遵循这些规则可以实现最佳的组织,并且易于参考。
🙅♂️
或者,你可能会发现编写 TypeScript 类型就像强迫你的孩子参加课外活动一样。它非常严格且不近人情,不允许你的代码弄清楚它是什么以及要去哪里!你通过强加你的意志来阻碍它的发展!
我想,一个井井有条的书架和一个独立的精神的独创性一样具有价值,并且两者都有很多东西可以学习。
最后,让我们再次考虑一下相关性。
你可能会感到压力,要求在执行代码之前就知道自己在做什么——在代码执行之前为自己指定类型。你可能会感到压力,要求在公开发布之前说明你所有的失败和教训。朋友们,为了保持你的类型,你承担了巨大的努力。这是一种压力和僵化,有时对我们的软件施加这种压力和僵化是很好的,但对你自己或他人来说是不公平的。
我们都有我们的"1" + "1" = "11"
时刻。它们是相关的,并且完全是人类的,如果不是天才的一种形式的话。拥抱它们。严格防止它们是不可扩展的。
我感觉在这一刻,我可能学会了如何学习TypeScript,并希望松散地抓住任何使我成为我的类型。
这会给你一种错误的印象,即你拥有高质量的代码。你不需要编写任何条件语句来确保参数是预期类型,你不需要编写单元测试,因为 TS 会检查类型。
完全错误!!!
这只会强迫你编写一些——完全不必要的——代码,让你产生一种温暖的(但错误的)感觉,即你“类型安全”。
这需要额外的构建步骤来让你产生这种错觉。
使用特殊的工具来运行测试(显然——也在 TS 中),以及更多的开销,仅仅是为了让你自己欺骗自己,认为你的代码优于由实际的 JS 开发人员编写的代码,而这些开发人员实际上知道自己在做什么,但只使用 JS!
TS 是我生命中的祸害!
由愚蠢的经理强制执行,因为 F* M$ 告诉他们,而 F* M$ 知道,因为它很大!
这是自 GWT 以来发生在前端开发中最糟糕的事情,而且是由相同类型的人造成的!
那些鄙视 JS 并认为 JS 需要修复的人,因为它很糟糕。
习惯使用 C/Java 和其他服务器端语言的人,他们无法没有他们所有的人工限制,他们必须限制 JS,以便他们能够继续编写它。
别客气。请告诉我们你真正的感受。
我多少同意你的观点,即 TypeScript 是一种针对一种被扩展到超出其最初创建目的的语言的权宜之计。
我不会说 JS 坏了,但即使你知道自己在做什么,也不意味着“X”个团队成员中的每个成员都知道你当时的想法。而且,由于很多人似乎反对代码中的注释,我们将不得不忍受这种权宜之计 :)
最好有一个标志来强制在运行时也进行类型检查。
Jake,感谢你分享你关于保持相关的经验。我喜欢你赞扬自己学会了如何学习 TypeScript 的方式。我一直在通过使用https://github.com/screepers/screeps-typescript-starter包(使用 Rollup 进行部署)在 Screeps 中玩游戏来学习 TypeScript,该包非常棒。继续努力!