«

为什么推荐大家只使用 静态类型 语言?

时间:2026-4-3 00:01     作者:独元殇     分类: 开发相关


欢迎关注我的公众号,名叫「串串狗小刊」

除了开发速度之外,其余的所有情况,静态类型都是强者。

开发速度快,是优势,但是动态类型除了这个优势之外,毫无优势。所以这点优势,微不足道。

国外的 svix 网的大佬 汤姆·哈科恩 说过:「编写无类型软件让你全速前进。全速冲向悬崖」。这比喻活灵活现 (^o^)/~

只要在编写时,稍微多花一丢丢时间,就行。养成习惯就完全没问题了。

这个 JavaScript 是最极端的动态类型语言,几乎自由到了极端。其他的动态语言,起码在运行时还会在检查一下,而 JavaScript 在运行时都不检查,直到执行时啪叽,报错喽:

img

因此,TS 是必选项!

你在开发时你都没有办法知道自己有没有埋雷。这对于一个对稳定性要求很高的系统,简直很没有安全感。

我们对静态化的误解是,以为它不就是变得整齐了一点吗?不是,它真的有用。

能当做注解

看看这三个生日问候函数:

img

在没有文档的情况下,理解友好度,从上到下依次递增。

第三个函数,也是 TS ,阅读起来是不是非常舒服。如果你在接受一个复杂的项目,整个代码都是类似于第三种的那种,你肯定喜欢!

更有用的是,第三个函数,直接就固定了,age 是一个数字。

如果用户输入了非数字,而我们函数内部还有 age + 1 等等运算,那就不会出现用户输入了 字符串 20 ,出来的结果是 201 这种荒谬的结果了。

一群互不信任的程序员,在不同的时区,用不同的电脑,改着同一个几十万行代码的项目,调用方与被调用方之间的契约至关重要,这样调用方才能知道被调用方何时发生变化,这对于开源库尤其重要!!!!

开发过程,超级舒服

我们一般使用 IDE 来开发,如果出现问题,TS 会在编写时马上提醒!

编译器也会全程伴随。

你不信自己的大脑,你还能不信编译器吗?

这种安心感,JavaScript 永远给不了你。

再举个例子,假如我们要修改这一大堆代码。

img

这个 ageGreeting 和 ageGreetingPro 的参数。Pro 版本,是静态类型,我们毫秒间,大脑就能反应过来它传入的是个 Person 对象。而普通版本,你得读文档,然后阅读各个代码库的文件..... 一不小心,你就犯错了。

使用 静态化 就省去看文档的时间了。

信息量大

在编译时,能尽可能把更多的错误排除,相当重要。

看看这个 Rust :

img

我们现在试图把一个【学生】加载到【书本】类型中。

并且,我们 studen 这个是拼错了。

当然这个是一个例子,但也是我们在编程时,尤其是弱类型语言里,超级频繁犯的错误。

而且这类 bug,我们碰到报错,往往已经是在生产环境里,极有可能已经发生了金额损失,甚至很大的金融损失。

那.... 如果我们这样写呢?

img

这两个问题,就都永远不会发生了。

你在顾虑啥呢?

天下武功,唯快不破。

所谓支持 动态化,而不是 静态化,无非就是因为 动态化 快!

还有人说,什么学习曲线,这个不重要。因为几乎没有什么曲线,就是多敲几个字而已。

还有人说会增加源代码量.... 没意义,编译后一模一样。

那就说速度吧。

你用 TS ,只要编译(或者说,是类型检查)通过,起码除了业务逻辑有漏洞外,不会出现那些低级错误。因为一切低级错误都在类型检查阶段扫除了,这个心可以放下了。

编写无类型软件让你全速前进。全速冲向悬崖。动态化 ,就是技术债务,你就调试吧,烦死你。排雷吧,不是快吗?快有什么用.....

你要付出 3 倍甚至 10 倍的代价。

当然,还有 靠大量的测试用例 也能让代码,尤其是 动态化 代码,达到可靠程度,但两者并不冲突。

参考文档:

https://www.totaltypescript.com/typescript-types-dont-exist-at-runtime

https://zuplo.com/blog/typescript

https://www.svix.com/blog/strong-typing-hill-to-die-on/

标签: 原创 静态类型