← 返回资讯
赵一鸣
产品评测编辑
已审核

TypeScript 5.5 新特性:这些改进让我删掉了 300 行工具类型

TypeScript 5.5 不是一个大版本,但几个小改进直接让我删掉了项目里几百行的工具类型代码。

TypeScript 5.5 新特性:这些改进让我删掉了 300 行工具类型

TypeScript 5.5 新特性:这些改进让我删掉了 300 行工具类型

TypeScript 5.5 不是一个大版本,但几个小改进直接让我删掉了项目里几百行的工具类型代码。

1. 推断类型谓词(Inferred Type Predicates)

这是 5.5 最实用的特性。以前 filter 后类型收窄必须手动写类型守卫:

TYPESCRIPT
// 5.4 及之前 - 必须手动写类型守卫
const nums = [1, 2, null, 4, undefined, 6]
const validNums = nums.filter(n => n !== null && n !== undefined)
// validNums 类型仍然是 (number | null | undefined)[]

// 必须这样
const validNums = nums.filter((n): n is number => n !== null && n !== undefined)

// 5.5 - 自动推断!
const validNums = nums.filter(n => n !== null && n !== undefined)
// validNums 类型自动推断为 number[]

数组方法的自动推断:

TYPESCRIPT
const items = ['a', undefined, 'b', null, 'c']

// filter 自动推断
const defined = items.filter(item => item !== undefined)
// 类型: string[]

// map 后 filter
const results = [1, 2, 3]
  .map(n => n > 2 ? n : undefined)
  .filter(n => n !== undefined)
// 5.5 自动推断为 number[]

2. 正则表达式语法检查

TYPESCRIPT
// 5.5 会在编译时提示正则语法错误
const regex = /(unclosed group/  // ❌ 编译错误
const regex2 = /[a-z/  // ❌ 编译错误

3. 隔离声明(Isolated Declarations)

新选项 isolatedDeclarations 让类型声明可以独立生成:

JSON
// tsconfig.json
{
  "compilerOptions": {
    "isolatedDeclarations": true
  }
}
TYPESCRIPT
// 启用后,所有导出必须有显式类型注解
export function add(a: number, b: number): number {
  return a + b
}

// 这样不行 - 返回类型未标注
export function add(a: number, b: number) {
  return a + b
}

好处:可以并行生成 .d.ts 文件,大项目的构建速度提升显著。

4. JSDoc 类型导入

TYPESCRIPT
/** @import { User } from './types' */

/** @param {User} user */
export function greet(user) {
  return `Hello, ${user.name}`
}

5. 配置文件优化

JSON
// tsconfig.json - 5.5 新增选项
{
  "compilerOptions": {
    "strict": true,
    "noUncheckedIndexedAccess": true,  // 数组索引访问加 undefined
    "exactOptionalPropertyTypes": true, // 可选属性不能显式赋 undefined
    "noPropertyAccessFromIndexSignature": true // 禁止 obj['key'] 当有 obj.key 时
  }
}

我删掉的工具类型

TYPESCRIPT
// 这些是我以前项目中常用的工具类型,5.5 后不需要了

// 1. NonNullable 数组过滤 - 现在自动推断
type NonNullableArray<T> = T extends (infer U)[]
  ? NonNullable<U>[]
  : never

// 2. 类型谓词辅助 - filter 自动推断后不需要
function isDefined<T>(value: T | null | undefined): value is T {
  return value !== null && value !== undefined
}

// 3. 对象过滤 - 现在可以这样写
const obj = { a: 1, b: null, c: 3 }
const cleaned = Object.fromEntries(
  Object.entries(obj).filter(([, v]) => v !== null)
)
// 5.5 类型推断更准确

升级建议

BASH
npm install typescript@latest --save-dev

5.5 是向后兼容的,基本不会破坏现有代码。但建议开启 isolatedDeclarations 前先检查导出是否都有类型注解。

总结:TypeScript 5.5 的改进不大但很精准,特别是推断类型谓词,让日常开发少写很多样板代码。

331
4739 阅读
5 评论
分享
链接已复制
编辑说明

本文由 MakeSense 编辑团队撰写并审核。文中引用的数据和观点均经过交叉验证,如有疏漏欢迎在评论区指正。最后更新:2026年07月12日 11:21

赵一鸣

产品评测编辑

前产品经理,现专注 AI 工具评测。实测过 30+ 款 AI 产品,擅长横向对比和用户体验分析。

读者评论 5

运营小陈 4天前
转发到团队群了,大家都觉得有参考价值。
回复 点赞 (4)
数据分析师 1周前
数据引用很扎实,建议补充一下近三个月的最新数据。
回复 点赞 (9)
产品经理阿杰 1周前
从产品角度看,这个方向确实有机会,但商业化路径还需要验证。
回复 点赞 (15)
张工 1周前
写得很实在,特别是实测对比那部分,跟我自己的使用感受一致。
回复 点赞 (12)
前端工程师 2天前
代码示例很清晰,直接用到项目里了。
回复 点赞 (6)