TypeScript 5.5 引入了一系列重要新特性,从增强型装饰器到类型推断的全面升级,这些功能将显著提升开发效率与代码质量。本文结合代码示例详细介绍关键特性。
一、增强型装饰器:更灵活的元编程
1. 类属性装饰器的改进
TypeScript 5.5 中属性装饰器可以更方便地获取属性描述符,实现更强大的功能。例如记录属性访问次数:
function logAccess(target: any, propertyKey: string) {
let count = 0;
const originalGet = Object.getOwnPropertyDescriptor(target, propertyKey)?.get;
Object.defineProperty(target, propertyKey, {
get: function() {
count++;
console.log(`属性 ${propertyKey} 被访问了 ${count} 次`);
return originalGet?.call(this);
}
});
}
class MyClass {
@logAccess
value: number = 42;
}2. 方法装饰器的参数增强
现在方法装饰器可以获取更多方法信息,包括参数类型和返回值类型:
function validateParams(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args: any[]) {
if (typeof args[0] !== 'number') {
throw new Error('第一个参数必须为数字');
}
return originalMethod.apply(this, args);
};
return descriptor;
}
class Calculator {
@validateParams
add(a: number, b: number): number {
return a + b;
}
}二、类型推断的重大升级
1. 推断类型谓词(Inferred Type Predicates)
这是 TypeScript 5.5 最令人兴奋的特性之一。filter 后不再需要手动类型断言:
// TypeScript 5.5 之前需要手动断言
const names = users
.filter((u): u is NonNullable<typeof u> => u !== null)
.map(u => u.name);
// TypeScript 5.5 自动推断
const names = users
.filter(u => u !== null) // TS 自动推断返回类型
.map(u => u.name); // u 现在是 { name: string }这个改进让代码大幅简化,消除了大量冗余的类型断言代码。
2. 函数返回值类型的智能推导
对于包含条件语句、循环等复杂逻辑的函数,编译器现在能更精准地推断返回值类型:
function getValue(isEven: boolean) {
if (isEven) return 4;
return 'odd';
}
// 返回值类型被准确推断为 number | string3. 数组类型推导优化
const numbers = [1, 2, 3, 4];
const strings = ['a', 'b', 'c'];
const mixed = [...numbers, ...strings];
// mixed 类型自动推导为 (number | string)[]三、其他实用特性
模板字面量类型的扩展
type Prefix = 'user_';
type UserId = `${Prefix}${number}`;
const id: UserId = 'user_123'; // 类型安全ECMAScript 新特性支持
对 class static block 等 ES2022+ 特性的全面支持:
class MyClass {
static value: number;
static {
this.value = 42;
}
}总结
TypeScript 5.5 的核心价值在于减少了开发者需要手动编写的类型代码量。推断类型谓词和改进的类型推导让你可以写出更简洁的代码,同时享受完整的类型安全保障。
评论