关于TypeScript,我的一些真实想法
以前,我算得上是TypeScript的“狂热推广者”,总想着把它塞进公司的每一个项目里。那时候觉得,静态类型能让一切都变得更完美,事实真的是这样吗?经过这些年的实践,我不得不承认,在小型项目里,TypeScript带来的麻烦比好处多得多。
一开始接触TypeScript,配置就是个绕不开的坎儿。得去捣鼓tsconfig.json
,确保各种依赖和它兼容,还要安装、配置类型定义,连构建过程都得调整。虽说现在Vite、Next.js这些现代框架,能用零配置模板简化不少,但要是从头开发,或者不打算用整套框架,这些配置步骤还是得自己来。就拿写个简单的脚本来说,我宁愿直接上手写JavaScript代码,也不想花20分钟在配置TypeScript上。
你看,用JavaScript打印一句“Hello, world!”,一行代码就搞定:
console.log("Hello, world!");
可换成TypeScript,哪怕这么基础的操作,也得加上类型声明:
const message: string = "Hello, world!";
console.log(message);
虽说TypeScript能推断类型,但这么一来,简单的脚本也变得繁琐、正式了。在那些只想快速实现个小功能、调用个API的项目里,这些额外的代码反而成了阻碍。
JavaScript的一大优势就是灵活,做个概念验证啥的特别快。但用了TypeScript,这种灵活劲儿就没了。比如尝试调用一个新API,JavaScript里直接获取数据接着往下写就行:
fetch("https://api.example.com/data")
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
在TypeScript里,还得先定义数据类型:
interface ApiResponse {
id: number;
name: string;
email: string;
fetch("https://api.example.com/data")
.then(res => res.json())
.then((data: ApiResponse) => console.log(data))
.catch(err => console.error(err));
要是用any
类型或者逐步引入类型,又有点违背用TypeScript的初衷。开发的时候,谁不想快速得到反馈,顺顺利利地写代码,哪有心思一直想着类型的事儿。
都说TypeScript能减少bug,可在小项目里,很多它能捕获的错误,我自己看代码也能很快发现。像把字符串类型的age
用来做乘法运算,TypeScript确实能检测出来,但在只有几百行代码的小应用里,这种错误真不至于让我特别担心。
还有构建步骤,用JavaScript写的脚本,直接node script.js
就能运行。TypeScript却得先编译,tsc script.ts && node script.js
,虽说可以用ts-node
省去手动编译,可还是增加了不必要的复杂性。
第三方依赖也是个问题,安装个包,经常遇到TypeScript报错,发现人家根本不支持TypeScript。要么找类型定义包,要么自己写,再不济就用any
类型,对小项目来说,这就是自找麻烦。
不过,我可不是说TypeScript不好。在大型应用,尤其是多人协作的项目里,在需要长期维护的项目中,还有那些模块间契约要求严格的代码库,TypeScript还是很有用的。但要是做个副项目、快速脚本,或者搞个MVP和原型,JavaScript反而更顺手,写起来快,也不用和编译器“较劲”,开发过程都变得有意思多了。
TypeScript说到底就是个工具,别把它当成编写JavaScript的唯一准则。在合适的项目里用它,效果没得说;要是做小项目觉得它麻烦,那真不如换JavaScript试试。大家在项目里都是怎么选择的?欢迎一起聊聊!