TypeScript通过显式类型注解、JSDoc+checkJs、接口/类型别名及严格模式,在开发阶段拦截隐性错误。支持.ts文件直接标注、.js文件零成本加固、结构复用与类型推断强化,提升代码健壮性与协作效率。

JavaScript 本身不检查类型,变量随时可被赋任意值;TypeScript 的核心作用之一,就是为这些变量“定规矩”。配合得当,不用重写代码,就能在开发阶段拦住大量隐性错误。
用 显式类型注解 锁定变量身份
在 TypeScript 文件(.ts)中,直接为变量标注类型,是最直接的约束方式:
-
let username: string = "李四";—— 后续再赋username = 42就会报错 -
const timeout: number = 5000;—— 常量加类型,既防误改又防误用 -
let items: string[] = ["a", "b"];或let user: { name: string; id: number };—— 明确数组元素或对象结构
在 JavaScript 文件里靠 JSDoc + checkJs 补类型
不改后缀也能享受类型保护:只要项目启用了 "checkJs": true,就可以在 .js 文件顶部加 // @ts-check,再用 JSDoc 写类型:
/** @type {string} */ let token;/** @param {number} id @returns {Promise<User>} */ function fetchUser(id) { ... }/** @type {{name: string, active?: boolean}} */ const config = { name: "app" };
这种方式零迁移成本,适合存量 JS 项目逐步加固。
立即学习“Java免费学习笔记(深入)”;
用 接口(interface)或类型别名(type) 统一复杂结构
避免重复写长类型,也方便多人协作时保持一致:
- 定义一个用户结构:
interface User { id: number; name: string; email?: string; } - 所有相关变量都复用它:
let currentUser: User; const users: User[] = []; - 函数参数/返回值也用它:
function updateUser(user: User): User { ... }
一旦接口变更,所有使用处都会立刻提示,而不是等到运行时报错。
善用 类型推断 + 严格模式 防漏网之鱼
TypeScript 默认会根据初始值推断类型(如 const count = 10 → 推断为 number),但仅靠推断不够牢靠。建议在 tsconfig.json 中开启关键严格选项:
-
"strictNullChecks": true—— 不允许把null或undefined赋给string这类非空类型 -
"noImplicitAny": true—— 禁止未声明类型的参数或变量,默认变成any就报错 -
"strictBindCallApply": true—— 检查call/apply的参数是否匹配函数签名
这些设置让类型系统真正“较真”,把模糊地带收窄。


















