关于typescript的一些困惑?

作者站长头像
站长
· 阅读数 13

1.首先,我想确认一下从编程的角度,我们有“静态类型检查”和“动态类型检查,对把?2.一般情况下我们用typescript做静态类型检查,检查源码里面自定义数据类型,对把?3.那么,我们做的所谓的动态类型检查是不是指的那些库,比如Joi,ajv什么的,比如你点击一个按钮,然后调这个库来检查一个obj的schema,如果类面的key value类型都能对的上,我们就通过,如果类型对不上,我们就报错。这个我理解的对把?4.另外,我想问一下,ts可以做动态类型检查吗?5.我最大的困惑来自于,那个源码我们是自己写的,为啥ts还这么的重要,用来检查类型?相反,动态的数据是“运行时“来的,也就是,要不是call api的来的,要不是终端用户输入填写的时候来的,这个时候数据的结构才是不确定的,反而没有那么多的人讨论这个,ok,就算你说,有可能这个是一个庞大的项目,有几百个人一起合作,但是我看到useState("")的时候我肯定知道这个type是一个string阿,ts为什么那么重要阿。我看到其他人举例说function的参数,可能有很多很多,如果加上ts,方便知道传什么,不过我感觉这种情况不是很常见,程序员自定义的函数,或者自己去封装,一般都不会搞很多参数进去吧。6.您觉得静态检查和动态检查哪个更重要,或者说在你的开发生涯中,是静态type报错的多,还是动态报错更常见呢?7.react自带的那个propTypes库,是动态检查还是静态检查阿?

感谢大佬的回答,如果您能逐一回答yes或者no,来确认我的理解是否准确就更好了。

回复
1个回答
avatar
test
2024-07-02
  1. true。
  2. true。
  3. true。
  4. false。TS 编译之后就成了 JS,即使你编写了对应的逻辑,那也并不能说是 TS 完成的动态类型检查。
  5. 这一点就在于,如果你是一个组件或插件的开发者,提供了 index.d.ts,那么函数如何使用是很明显的。因为我不需要看函数实现的细节,只要告诉我参数几个、类型几何、返回值是什么样就好了。可能说 JSDoc 也可以做到类似的效果,那可以问问自己,平时注释都没写几行的人,还写 JSDoc?我觉得和注释是差不多的,有,当然最好,而且是可以实实在在地提供检查和提示。不然也不会有那么多的 defineConfig() 了。
  6. 静态检查在编码时就能发现一些错误,至于动态检查,就个人而言,如果不是给其它开发者使用的话,这个东西基本是不会写的。写一套良好的动态检查不见得比写 TS 简单,不过兼容性会更好确实是真的(考虑使用者不使用 TS)。
  7. 动态检查。与 Vue Props 类似。但是书写很繁琐,可以使用 TS 代替。为什么会出现这么个东西呢?React 组件说白了也是函数,我怎么知道那个参数可以传什么类型。不是所有库都可以做到像 jQuery 那样,拥有极强的兼容性,一个核心函数打天下太累了,而且 jQuery 是固定的(万众一心),可我使用的组件库可不一定,对于组件开发者来说,使用 propTypes 给使用者提供一些提醒是很不错的。而 TS 和 VSCode 都是在 20 年之后才锋芒毕露,在此之前没有那么好的支持。

当然,这并不能说:无脑用 TypeScript 就可以了!只是给了一种可选的方式而已(Any or Type)。

为第 5 点补充一图,这很直观了。

answer image

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容