JavaScript是动态弱类型语言,类型属于值、运行时确定,存在隐式转换等隐患;TypeScript作为其渐进式超集,通过静态类型检查弥补JS工程化短板,提升大型项目可维护性与协作效率。
JavaScript 的类型系统是动态、弱类型的——变量本身没有固定类型,类型属于值,且在运行时才确定;值可以随时改变类型,运算中还常发生隐式转换。这种设计让写代码很自由,但也会埋下隐患:比如 10 + "5" 得到 "105" 而不是 15,null == undefined 返回 true 却 typeof null 是 "object"。这些不是 bug,而是语言机制的一部分。
它有七种原始类型:undefined、null、boolean、number、string、symbol、bigint,外加统一的 object 类型(数组、函数、日期等都算 object)。类型检测靠 typeof,但有历史缺陷(如 typeof n);判断真假值则依赖 truthy/falsy 规则(
ull === "object"0、""、null、undefined、NaN、false 为 falsy)。所有类型转换都是运行时行为,没有编译检查。
TypeScript 不是新语言,而是 JavaScript 的渐进式超集——它保留全部 JS 语法,只额外加了一层静态类型检查。它的流行不是因为“更高级”,而是精准补上了 JS 在工程化场景中最痛的短板:
getData() 不知道返回的是数组还是对象;加上类型注解 getData(): User[],意图一目了然user.name.toUpperCase() 但 user 可能是 null)在 JS 中要等用户点到那一步才暴露;TS 在写完就提示“对象可能为 null”小脚本、快速原型、教学示例、胶水逻辑——JS 依然轻快好用;而中大型应用、需要长期维护、多人协同、对接复杂 API 的场景,TS 提供的类型文档+编译防护+IDE 智能,实实在在降低了出错成本和沟通成本。它把“靠人肉记忆和注释来理解类型”,变成了“由工具自动验证和推导”。本质上,TS 流行是因为它尊重 JS 的现实,又悄悄给它装上了安全带。
基本上就这些。