mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
1594 字
4 分钟
2026年06月29日 | TypeScript 的装饰器,原来可以这么玩
2026-06-29

TypeScript 的装饰器,原来可以这么玩#

哟,各位还在跟代码死磕的“才子”们,本宫又来了。今儿个不聊后宫八卦,聊点你们天天用、但多半用得一塌糊涂的玩意儿——TypeScript的装饰器。怎么,一听“装饰器”就觉得高深,觉得是给代码贴金箔的高级货?本宫看你们是被那些花里胡哨的教程晃花了眼,把个好好的工具愣是当成了魔法贴纸,到处乱贴,贴完还一脸懵。

本宫今儿就把话撂这儿:装饰器这东西,玩好了是神器,能把重复的破事收拾得利利索索;玩砸了,那就是你代码库里的一颗定时炸弹,炸的时候连亲娘都认不出。别急着瞪眼,听本宫慢慢给你们盘道盘道。

第一节:装饰器是啥?别跟本宫扯什么元编程 说白了,它就是个“包装纸”。你有个好好的函数或者类,功能也行,但你觉得它不够“体面”,或者想不动它核心就给它加点附加技能——比如加个日志、加个权限检查、加个缓存。装饰器就是干这个的。你把它“贴”上去,它就能在原功能执行前后,偷偷塞点私货。这比你到处复制粘贴 console.log 或者 if (auth) 优雅多了,优雅,永不过时。

第二节:那几种基础的,本宫都懒得夸 什么类装饰器、方法装饰器、属性装饰器、参数装饰器,听着挺唬人。本宫教你们一个笨办法:看它贴在哪儿。贴在 class 上头的,管整个类;贴在方法上的,管那个函数;贴在属性或参数上的……哎,你们真见过谁给参数贴装饰器吗?本宫都替那参数慌。大部分时候,你们会用到的就是类和方法装饰器,其他的,等你们成了“老油条”再折腾不迟。

第三节:参数化装饰器——这才是进阶的开场白 光贴个空标签有什么意思?要玩就玩带参数的!比如,你想搞个缓存装饰器,总不能所有缓存过期时间都一样吧?这时就需要一个工厂函数,外层函数吃进你的配置(比如过期时间),内层返回一个真正的装饰器。这模式一出来,代码的灵活度直接起飞。别怕绕,想想你在火锅店点菜,你要了份鸳鸯锅(工厂),后厨才给你端出来红汤白汤各一半(装饰器实例)。是不是瞬间通透了?

第四节:执行顺序?不搞清这个,迟早要哭 这是最大的坑,没有之一!多个装饰器一起上场,执行顺序是从下往上(贴近定义的先执行),但!是!如果是类装饰器和方法装饰器混用,规则又不太一样。本宫建议你们,别试图在脑子里算这个顺序,那是愚公才干的事。老老实实,在你的关键装饰器里加点日志,跑一遍看看控制台输出。或者,保持克制,别在一个东西上堆太多装饰器,叠罗汉呢?

第五节:实战避坑,本宫踩过的雷都给你们标出来了 坑一:装饰器里别瞎改原型。特别是老式实验性装饰器,动了原型,后续的人会以为见了鬼,方法突然不是原来那个了。现代TypeScript用 experimentalDecorators 配置时,多用 descriptor 来操作,相对安全。 坑二:类型丢失!这是心梗级别的坑。你给个方法加上装饰器,TypeScript有时候就抽风,认为它返回类型变了,或者参数类型没了。解决办法?手动用 ReturnTypeParameters 工具类型把装饰前的类型“抢救”回来,或者更狠的,用泛型把原函数类型“框”住传进去。过程很痛苦,但比类型全失强。 坑三:依赖注入框架的装饰器(比如NestJS那种),别自己手撸。那是别人造好的轮子,你直接 @Injectable() 用就行了,别好奇人家内部实现,除非你想头秃。

第六节:正经用法,让代码体面起来 别整天想着用装饰器搞炫技。本宫告诉你几个本宫用着最顺手的场景:

  1. 日志/埋点:给核心业务方法加上,自动记录入参出参和耗时。出事了,查日志一目了然,比找人问话痛快。
  2. 权限校验:在 @Admin() 装饰器里统一检查用户角色。把散落各处的 if (!user.isAdmin) throw ... 收拢起来,看着就清爽。
  3. 数据验证:结合 class-validator,给DTO类属性贴上 @IsString(), @MinLength(5) 等。校验逻辑和数据模型完美结合,谁用谁知道。

本宫最后说句掏心窝的:技术这玩意儿,最忌讳的就是“为了用而用”。装饰器再花哨,它也只是个工具。你得先搞明白你的痛点是什么,是不是真需要它来“装饰”,还是说加个普通函数调用就完事了。本宫见过太多项目,为了“架构美观”,把简单事情复杂化,最后维护的人骂骂咧咧。

行了,本宫的碎碎念到这儿。该说的避坑点、该走的流程都给你们铺好了。至于能领悟多少,就看各位的造化了。本宫去御花园溜达了,你们可别让代码里的bug追上来咬你们脚后跟啊!

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

2026年06月29日 | TypeScript 的装饰器,原来可以这么玩
https://www.yunio.cn/posts/2026-06-29-typescript-的装饰器原来可以这么玩/
作者
媚娘
发布于
2026-06-29
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录