你为什么不用TS
想不想用其实是看公司的,如果在的部门现在使用的是vue2,本身就不支持我使用TS。
不过,我本人还是不愿意使用TS的。因为TS已经违背我之前学习JS的初心了,我学JS本身就是因为其本身的灵活,不是强定义类型,变量直接定义赋值即可,这几点吸引了我。虽然我也知道TS易于管理,易于后期维护,我也学习了TS,并且在Vue3,React中使用过typescript写过几个自己的小项目。如果未来的项目或者以后的公司要求使用TS,我也会使用的。
但是这并不影响我不想用TS,我觉得加入了一堆泛型,接口(interface)和定义好数据类型的变量的JS代码,不是最初喜欢的那个JS了。我喜欢的JS是那个无拘无束的JS,虽然我改BUG错误的时候也改的头皮发麻,但是我就是喜欢写JS的感觉。TS虽然纵有千般好,但抵不过我写你时不爽的一时过。
接下来我们聊聊 TypeScript 附带的其它问题。这些问题需要具体问题具体解决,所以我在这里不提供解决方案,只是告诉读者可能面临的问题以及可以解决到什么程度。本人用的是 2019 macbook pro (CPU: 2.6 GHz Intel Core i7 + Mem: 32 GB 2400 MHz DDR4)。
1、hot reload 速度慢。以前改完代码之后立刻会重新刷新页面或者热启 node 服务器。然而现在有 TypeScript 之后还有额外的 transpile 一步。reload 的速度直接从几秒变成几十秒。我们做了一些优化,但是还是不能像以前那么快。
2、VSCode 占用资源暴增。VSCode intellisense 速度缓慢。最难受的是报错是在写完该行后 10 秒左右。做了优化之后稍微好了一些。
3、第三方库不支持 typscript。这个可以解决,就是自己写 typed interface。
4、天书一般的报错信息。很高一部分比例的错误长这个样子:
No overload matches this call.
Overload 1 of 3, '(props: { href: string; } & { action?: ((instance: ButtonBaseActions | null) => void) | RefObject
| null | undefined; ... 8 more ...; TouchRippleProps?: Partial<...> | undefined; } & { ...; } & CommonProps<...> & Pick<...>): Element' , gave the following error.Type '{ to: string; label: string; classes: { root: string | undefined; }; }' is not assignable to type 'IntrinsicAttributes & { href: string; } & { action?: ((instance: ButtonBaseActions | null) => void) | RefObject
| null | undefined; ... 8 more ...; TouchRippleProps?: Partial<...> | undefined; } & { ...; } & CommonProps<...> & Pick<...>' .Property 'to' does not exist on type 'IntrinsicAttributes & { href: string; } & { action?: ((instance: ButtonBaseActions | null) => void) | RefObject
| null | undefined; ... 8 more ...; TouchRippleProps?: Partial<...> | undefined; } & { ...; } & CommonProps<...> & Pick<...>' .。。。
说了这么多,如果你问我是否推荐 TypeScript,我只能说看情况。type check 对于大型项目来说太重要了。读和写代码的时候,有 type 也会在一些方面提高程序员的效率。但是我认为 TypeScript 可以提高的空间还有很多。如果你很在乎开发速度,快速迭代,那么建议你继续用 JavaScript。如果你需要高稳定性,那么建议你使用 TypeScript。