过渡阶段的关键是给JavaScript动态性加可控约束,TypeScript支持allowJs、JSDoc注解、渐进式类型替换及@types声明等方式实现JS与TS共存。

过渡阶段的关键不是消灭 JavaScript 动态性,而是给它“加一层可控的约束”。TypeScript 不要求你立刻重写所有代码,而是提供多种方式让 JS 的灵活性和 TS 的类型安全共存。
允许 JS 文件参与编译但暂不检查
在 tsconfig.json 中启用 allowJs: true 并关闭 checkJs: false,这样 TypeScript 编译器能识别并打包你的 .js 文件,但不会对它们做类型校验。适合刚起步阶段,避免被大量报错阻塞进度。
- JS 文件照常运行,不受影响
- TS 文件获得完整类型检查
- 为后续逐步添加 JSDoc 类型注解留出缓冲期
用 JSDoc 在 JS 文件里补类型信息
无需改后缀、不碰语法,直接在现有 .js 文件中用 JSDoc 注释描述类型,TypeScript 就能据此推断并提示错误。这是最轻量的“类型引入”方式。
/** @type {string[]} */ const list = [];/** @param {number} id @returns {Promise<User>} */ function fetchUser(id) { ... }- 配合
checkJs: true后,这些注释会触发真实类型检查
渐进式替换 any,优先从接口和函数入⼿
初期可接受 any 快速绕过报错,但要明确标记技术债。下一步聚焦高频、高风险模块:API 响应结构、工具函数入参/返回值、组件 props 等,用 interface 或 type 明确定义。
立即学习“Java免费学习笔记(深入)”;
- 把
function parse(data) { return data.items; }改成function parse(data: { items: string[] }): string[] - 将
const res = await api.get('/user');补上/** @type {ApiResponse<User>} */ - 避免全局
any,优先用unknown+ 类型守卫做安全访问
为第三方 JS 库补充类型声明
很多 npm 包没有内置类型,但社区已通过 @types/xxx 提供了定义。安装后,调用时就能获得参数提示和字段校验。
npm install -D @types/lodash @types/axios- 若找不到对应
@types包,可新建types/my-legacy-lib.d.ts手动声明: declare module 'my-legacy-lib' { export function doWork(input: string): number; }


















