真实面经题目 · 原创解析
用过 TS 吗,跟 JS 有什么区别?
这题考察 TypeScript 的类型系统边界和工程价值。高质量回答要讲清它是编译期约束、最终运行仍是 JavaScript,并补充外部数据、any 和运行时校验的边界。
真实面经题目 · 原创解析
这题考察 TypeScript 的类型系统边界和工程价值。高质量回答要讲清它是编译期约束、最终运行仍是 JavaScript,并补充外部数据、any 和运行时校验的边界。
TypeScript 是 JavaScript 的超集,在 JS 语法之上增加静态类型、接口、泛型、联合类型、类型推断和类型工具。它主要在编译期发现类型错误,编译后类型大多被擦除,运行时执行的仍是 JavaScript。工程上 TS 能提升 IDE 提示、接口约束、重构安全和多人协作效率,但它不能保证接口返回、用户输入这类运行时数据一定可信,必要时还要做运行时校验。
TS 不是替代 JS 的另一门运行时语言,而是 JS 的类型化超集。合法 JS 通常可以逐步迁移到 TS,TS 编译后输出 JS,再由浏览器或 Node.js 执行。
JS 是动态类型,错误更多在运行时暴露;TS 在开发和构建阶段通过类型标注、推断、接口、泛型和控制流分析提前发现不匹配,让调用方和实现方的契约更明确。
TS 的价值不只是防止传错参数,还包括自动补全、跳转定义、重构引用、组件 props 约束、接口模型沉淀和跨团队协作。项目越大、边界越多,收益越明显。
TS 类型大多会在编译后擦除,所以它不能验证接口真实返回值、localStorage 内容、URL 参数或第三方脚本。对不可信输入仍要用 schema、手写判断或服务端校验。
落地时可以从 allowJs、checkJs、关键模块类型声明和 API 类型开始,不必一次性全量改造。严格模式能提高质量,但也会增加迁移成本,需要结合项目阶段推进。
大多数类型信息会被擦除,运行时代码仍是 JS。enum、装饰器元数据等少数语法可能产生运行时代码,但普通 interface、type、泛型不会直接存在。
对象结构优先 interface,便于声明合并和扩展;联合类型、交叉类型、条件类型、元组等更适合 type。团队统一风格比机械区分更重要。
any 会绕过类型检查,后续操作都被放行;unknown 表示未知值,使用前必须收窄类型,因此更安全,适合外部输入的入口类型。
不能。TS 约束类型契约,测试验证业务行为、边界路径和副作用。类型正确不代表逻辑正确。