Typescript 使用装饰器获取参数值

2024-04-29

如何访问装饰器中方法参数的值?

export const NullParameterCheck = (target: Object, key: string, index: number) => {
 // how to get the value of the marked parameter in this case 'model'
 // ... do something with that value here. 
}

这就是我使用它的方式

public SetToolbar(@NullParameterCheck model: ToolbarModel): void {
}

我能找到的只是如何声明参数装饰器并记录其每个参数 谢谢。


装饰器在声明类时调用,而不是在调用方法时调用。您可以替换原始方法来拦截和更改原始参数,但是您不能从参数装饰器替换该方法,只能从方法装饰器执行此操作,因此您需要将装饰器添加到函数中:

const NullParameterCheck = (index: number) => (target: any, key: string, propDesc: PropertyDescriptor) => {
    let originalFunction: Function = propDesc.value;
    propDesc.value = function () {
        let argValue = arguments[index];
        let newArgs = [];
        for (let i = 0; i < arguments.length; i++)newArgs.push(arguments[i]);
        newArgs[index] = argValue || {};

        return originalFunction.apply(this, newArgs);
    };
    return propDesc;
}

class ToolbarModel { }

class x {
    @NullParameterCheck(0)
    public SetToolbar( model: ToolbarModel): void {
        console.log(model);
    }
}

new x().SetToolbar(null); 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript 使用装饰器获取参数值 的相关文章

随机推荐

  • div 上的背景图像未显示; div 正在折叠

    CSS body background url ninabg jpg left top no repeat background size 100 auto image background repeat no repeat backgro
  • 带有工具栏和 TabLayout 的 ViewPager 高度错误

    我在 AppBarLayout 下方有一个 ViewPager 带有工具栏和 TabLayout 我无法理解为什么加载的片段的高度大于可用空间 即使没有如此大的元素 使选项卡可滚动 这是主要的布局 xml
  • 如何仅在一个分支的提交上“git bisect”?

    在我目前正在进行的一个项目中 我们将每个功能保留为自己的分支 并在功能准备就绪时将其合并回主分支 每个功能分支内的提交可能包括大量 WIP 并破坏其他功能的功能 直到它完整且稳定 无论如何 由于主分支的提交是唯一 据说 稳定的提交 我想gi
  • 仅当其他对象成功创建时才创建对象

    我对 Django 相当陌生 并且不熟悉这种情况的最佳实践 在任何框架 语言中 而不仅仅是 python django 情况是 当用户第一次在我的网站上注册时 我想为他们创建一个 组织 如果它不存在 然后随后为他们创建一个引用该组织的用户
  • Swift(UI) 错误:无法在不可变值上使用变异成员:“self”是不可变的

    基本上我想做的是 如果您按下按钮 那么条目应该获得一个新的 CEntry 如果有人能帮助我那就太好了 谢谢 struct AView View var entries CEntries var body some View ZStack V
  • 将自定义操作添加到 UserModel 的管理页面

    是否有可能在 django UserModel 的管理页面中创建自定义操作 我希望自动将用户添加到组中 例如将他添加到员工中 设置一些额外的值等 当然还要创建收回这些更改的操作 感谢您的帮助 Import User在你的 admin py
  • 如何发送/接收 JSON?

    我知道这是一个愚蠢的问题 但我通常不进行 Web 编程 并且被要求发送一些 JSON 数据并接收一些回报 我用谷歌搜索 很清楚如何编码和解码 JSON 数据 但我对此很陌生 我不知道如何与给定的 URL 进行通信并说 这里有一些数据 请发回
  • 如何修复 Visual Studio 2015 Preview 上 SDL 2.0.3 未解析的外部问题?

    所以我收到以下错误 1 gt SDL2main lib SDL windows main obj error LNK2019 unresolved external symbol imp fprintf referenced in func
  • JMockit + Jetty 进行功能测试

    我在集成测试中使用 ShrinkWrap 启动 Jetty 服务器 Problem 示例项目中的 JUnit 测试试图模拟ForwardingServlet班级 但是 在这种具有嵌入式 Jetty Web 服务器的场景中 实际上有two该类
  • 获取 UIView 的当前角度/旋转/弧度?

    如何获取 UIView 当前的角度 旋转 弧度 你可以这样做 CGFloat radians atan2f yourView transform b yourView transform a CGFloat degrees radians
  • 使用 Maven 和 cxf-codegen-plugin 将 WSDL 客户端打包在 JAR 中

    我有一个 Maven 项目 它将使用许多 Web 服务 该应用程序将打包为 WAR 到目前为止 客户的代码已经生成cxf codegen plugin 在里面generate sources阶段 默认情况下 生成的源放入target gen
  • 使用 CDK 创建 ssh 密钥对/将其关联到 ec2 实例

    我正在使用新的云开发工具包 CDK 使用 Java 语言在 AWS 上构建基础设施 我在公共子网上使用堡垒主机与私有子网上的 RDS 实例进行通信 因此我通过堡垒主机上的 ssh 隧道从外部访问数据库 在私有子网上 我以这种方式创建了 Ba
  • 在 JavaScript 中实现撤消功能 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 javascript 中实现 ctrl z 经过多次谷歌搜索后 我偶然发现了 execCommand 我在用着document
  • 如何让 MediaRouteSelector 显示可用的 MiraCast 和 Chromecast 设备?

    我正在尝试让我的媒体路由选择器同时显示 MiraCast 和 Chromecast 设备 我有一个 Chromecast 接收器应用程序 并且还使用 Android 中的演示 API 因此理想情况下 用户只需单击媒体路由器按钮并选择他们拥有
  • bash:PWD 和 CURDIR 有什么区别?

    我的问题 我使用 Makefile 来运行docker runtarget 需要当前工作目录作为其参数之一 我使用任一 PWD or CURDIR build Dockerfile docker run lt PWD or CURDIR g
  • 如何在 .NET 4+ 中实现 ISerialized 而不违反继承安全规则?

    背景 野田时间 https nodatime org包含许多 可序列化的结构 虽然我不喜欢二进制序列化 但我们 早在 1 x 时间线中就收到了许多支持它的请求 我们通过实施ISerializable界面 我们最近收到了一份问题 报告 htt
  • 如何从一个端口为 Jetty 提供 https 和 http 服务?

    我知道这是一个重复的问题 但原始发帖者提出这个问题的原因是错误的 我并不是暗示我问它是为了right原因 但让我们看看 我们有一个在非标准端口号上运行的 Web 服务 尽管用户似乎能够记住端口号 但有时他们会错误地输入 http 而不是 h
  • C# 和 .NET 的“最佳”数据访问框架/方法是什么?

    编辑 我将其设为社区维基 因为它更适合协作格式 有多种方法可以从 NET 访问 SQL Server 和其他数据库 一切都有其优点和缺点 这永远不会是一个简单的问题 哪个是 最好的 答案永远是 这取决于 然而 我正在寻找在不同级别的系统背景
  • Meyers 的单例实现实际上是如何实现单例的

    我读了很多关于单例的内容 什么时候应该使用它们 什么时候不应该使用它们 以及如何安全地实现它们 我正在用 C 11 编写 并且遇到了 Meyer 的单例延迟初始化实现 如所示这个问题 https stackoverflow com ques
  • Typescript 使用装饰器获取参数值

    如何访问装饰器中方法参数的值 export const NullParameterCheck target Object key string index number gt how to get the value of the mark