T
TS架构师
4天前
TypeScript 5.0 装饰器实战
TypeScript装饰器最佳实践
TypeScript 5.0 装饰器完全指南
TypeScript 5.0 正式支持 ECMAScript 装饰器提案,这是一个期待已久的特性。
1. 基础语法
typescript
function logged(target: any, context: ClassMethodDecoratorContext) {
return function (...args: any[]) {
console.log(调用方法: ${String(context.name)})
return target.apply(this, args)
}
}
class Calculator {
@logged
add(a: number, b: number) {
return a + b
}
}
2. 类装饰器
typescript
function sealed(constructor: Function) {
Object.seal(constructor)
Object.seal(constructor.prototype)
}
@sealed
class BankAccount {
balance = 0
}
3. 属性装饰器
typescript
function observable(target: undefined, context: ClassFieldDecoratorContext) {
return function (initialValue: T) {
console.log(初始化属性: ${String(context.name)})
return initialValue
}
}
4. 实战:依赖注入
typescript
const container = new Map()
function injectable(target: any) {
container.set(target.name, new target())
}
function inject(serviceKey: string) {
return function (target: any, context: ClassFieldDecoratorContext) {
return () => container.get(serviceKey)
}
}
迁移建议
旧版实验性装饰器需要迁移到新语法,建议逐步替换。
2.9k 阅读