TypeScript 装饰器和循环依赖

2023-12-09

考虑使用装饰器的相互依赖代码示例(如下)。

现在考虑以下工作流程(是的,我确实想传递实际导出的类,因为我稍后需要使用它们):

  1. 应用程序导入并运行Parent.ts
  2. @Test(Child)导致应用程序导入Child.ts装修时
  3. 注:班级Parent代码尚未到达
  4. In Child.ts, the @Test(Parent)装饰器被执行
  5. 在此刻,Parent未定义,无法传递给装饰器。

正如您所看到的,存在令人讨厌的循环依赖关系,我看不到一种能够应用将类作为相互引用的参数的装饰器的方法。

请注意,我用过@Test为简洁起见,举个例子。实际的装饰器是@HasMany and @BelongsTo- 所以我这里确实有一个实际的用例。

我向你提出的问题是:“这个问题有解决办法吗?”

我担心的是,没有,除非更改 TypeScript 的编译代码以推迟装饰过程,直到导入所有涉及的代码。

代码示例:

Decorators.ts:

    export function Test(passedClass: Function): Function {
        return function (model: Function): void {
            console.log(typeof passedClass);
        };
    }

Parent.ts:

    import {Child} from "./Child";
    import {Test} from "./Decorators";

    @Test(Child)
    export class Parent {

    }

Child.ts:

    import {Parent} from "./Parent";
    import {Test} from "./Decorators";

    @Test(Parent)
    export class Child {

    }

今天遇到同样的问题。我通过替换稍微不同地解决了这个问题@Test(Parent) by @Test(() => Parent).

而不是跟踪类构造函数(Parent)在元数据中,我跟踪返回构造函数的 thunk(() => Parent)。这会延迟评估Parent导入的变量直到调用 thunk 为止,这就达到了目的。

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

TypeScript 装饰器和循环依赖 的相关文章

  • 开玩笑错误意外的令牌...(ES6)

    每当我在命令行中运行 jest 时 都会收到以下错误 Test suite failed to run Users
  • Javascript 函数指针,以参数作为函数中的参数

    不确定标题的措辞是否正确 或者是否有更好的表达方式 但我认为还可以 无论如何 到目前为止我了解以下内容 a b a b c foo 其中 foo 是在其他地方定义的函数 不接受任何参数 只会导致函数 a b 使用上述参数运行 然后可以在函数
  • Angular2 authguards 执行异步函数失败

    我想通过检查用户是否从服务器登录来保护我的路由 但异步函数不会被执行 这是我的代码 canActivate route ActivatedRouteSnapshot state RouterStateSnapshot Observable
  • 如何限制 Chrome 中的最大文本区域宽度和高度或如何禁用文本区域调整大小

    Chrome 允许通过在右下角添加文本区域来调整文本区域的大小 但有时这种移动可能会破坏页面的设计 所以我想知道如何限制该操作的最大和最小宽度 即如何完全禁用该功能和thml javascript css在页面上 您可以使用 resize
  • 元素存在之前的html5音频绑定时间更新

    我试图从音频标签绑定 timeupdate 事件 该标签尚不存在 我习惯这样做 body on click selector function e 我用音频标签尝试了这个 body on timeupdate audioPlayerJS a
  • 使用ajax发送表单数据

    我想用 ajax 以表单形式发送所有输入 我有一个这样的表单
  • 应该使用encodeURI吗?

    javascript 的encodeURI 函数有任何有效用途吗 据我所知 当您尝试发出 HTTP 请求时 您应该 完整的 URI 您想要放入 URI 中的某些片段 可以是 unicode 字符串或 UTF 8 字节序列 在第一种情况下 显
  • 为什么人们将自己的自定义/用户函数添加到 jQuery 对象中? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我见过人们将自己的自定义 用户功能添加到jQuery目的 例如 myUserFunc function regular JS code 你为什么
  • Durandal SPA 与打字稿有关的问题

    我使用 TypeScript 1 8 将我的 durandal SPA 应用程序从 VS 2012 更新到 VS 2015 它将生成 JavaScript ECMA5 我解决了所有构建错误 但我无法修复一个名为 return 语句只能在函数
  • Jquery:排除元素

    我有以下代码 document ready function a rel each function this qtip content text img class middle src i icon processing gif alt
  • 如何使用javascript将视频文件转换为字符串?

    我在 signalR 工作 我想通过将视频文件拆分为不同部分来将视频文件从一个客户端发送到另一个客户端 我已经通过分割图像源数据发送图像并在另一个客户端上接收该图像 document getElementById fileUpload ad
  • AngularJS 服务并承诺最佳实践

    我有一个 AngularJS 应用程序services 调用 http资源并返回promise我在控制器中解决了这个问题 这是我正在做的事情的示例 app service Blog function http q var deferred
  • 如何使用 TS 配置 CRA 以支持 nullish-coalescing-operator

    所以我开始了一个新的 CRA 项目 我正在使用 TS beta 来获得一些不错的功能 例如链接运算符 但我也想使用nullish coalescing operator ifExists elseUseThis 不幸的是它不能开箱即用 并告
  • 数据表 - 从 AJAX 源过滤数据

    我有一个数据表 正在从 api 获取数据 现在我的状态是活动的 非活动的 如果标志是活动的 那么我需要在数据表中显示 否则我不应该显示过期的 这是我的fiddle https jsfiddle net lakshmipriya001 qLp
  • 跟踪预防阻止了对 https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js 存储的访问

    大约一年半前 我使用 OfficeJS API 编写了一个 Excel 加载项 它一直工作到大约两周前 Excel 似乎已经进行了更新 现在我可以右键单击任务窗格并查看开发工具 而以前我无法做到这一点 并且必须运行外部 MS Edge 开发
  • 分配函数后如何删除 onmouseout 事件?

    我有一个问题 我正在为 onmouseout 事件分配一个函数 但运行该事件后 我需要将其删除 将非常感谢您的帮助 这取决于你的代码 如果你用 d3 这样做 那么你可以说 在 onmouseout 事件函数中 element on mous
  • 在请求标头中设置 Cookie Angular2

    我是 angular2 的新手 我的服务器 spring 在其响应标头中使用 set cookie 值来响应身份验证 如何将该 cookie 设置为下一次 API 调用的请求标头 我搜索了很多 但找不到合适的解决方案 作为http get
  • 使用 NodeJS 创建 YouTube 播放列表

    我正在尝试使用 NodeJS 服务器创建 YouTube 播放列表 我已按照 Oauth 的 NodeJS 快速入门说明进行操作 如以下链接所示 https github com youtube api samples blob maste
  • 从 node.js 创建对 AWS ES 实例的有效签名请求

    我试图找到一个示例 说明如何连接到 Node js 中的 AWS ES 实例 然后通过一个简单的请求访问 ES 集群 我正在尝试使用elasticsearch节点包 https www npmjs com package elasticse
  • 使用 CSP 防止自动点击链接 XSS 攻击

    当将 CSP 用于稍微不同的目的 沙箱 时 我意识到一个非常简单的自动点击链接似乎甚至可以绕过相对严格的 CSP 我所描述的内容如下 内容安全政策 default src none script src unsafe inline 还有身体

随机推荐

  • std::find 对象指针向量

    我有课A成员是另一个类的对象指针向量B class A std vector
  • 如何查找哪些电子邮件位于同一列表中?

    我有 11 个表 email1 email2 email3 email11 tr td td tr
  • 带有最小和最大按钮的 JSpinner

    我正在寻找一个类似 JSpinner 的组件 它提供内置按钮 可以立即将微调器值设置为 jspinner 模型的最小值或最大值 在我自己实现这个之前 我认为以前可能有人做过 尽管我在该主题上的谷歌搜索没有成功 有这样的组件吗 还是我应该自己
  • 使用迭代器迭代不同的数据帧

    假设我有 n 个数据框df 1 df 2 df 3 df n 分别包含名为SPEED1 SPEED2 SPEED3 SPEEDn 例如 import numpy as np df 1 pd DataFrame SPEED1 np rando
  • 子类 UITabBarController 来调整其框架

    我在调整 UITabBarController 大小时遇到 一些问题 因为我只想让它占据屏幕的下半部分 它似乎强制自己显示屏幕的整个高度 如果显示则减去状态栏 我尝试过对其进行子类化并在方法上修改控制器的视图框架 例如viewWillApp
  • Athena/Presto - UNNEST 映射到列

    假设我有一张这样的桌子 表 qa list id question id question answer 1 100 question1 answer 2 101 question2 answer 3 102 question3 answe
  • WordPress:列出没有评论的帖子

    我有一个简单的页面 我想显示尚未评论的帖子列表 我该怎么做 我想我可以将一些参数添加到 query posts 中 谢谢 您可以设置过滤器和查询变量来修改查询帖子的 SQL 将其添加到您的主题中functions php file func
  • 实现 delaunay 三角剖分的 Bowyer-Watson 算法

    我正在尝试实现以下 Bowyer Watson 算法来实现 Delaunay 三角剖分 function BowyerWatson pointList pointList is a set of coordinates defining t
  • 在 ruby​​ 中使用单引号与双引号相比是否有性能提升?

    您知道在 ruby 中使用双引号代替单引号是否会以任何有意义的方式降低 ruby 1 8 和 1 9 中的性能吗 所以如果我输入 question my question 它比更快吗 question my question 我想象 rub
  • R readHTMLTable 无法加载外部实体[重复]

    这个问题在这里已经有答案了 当我在笔记本电脑上运行该线路时 table500 lt readHTMLTable http en wikipedia org wiki List of S 26P 500 companies 1 它获取数据 当
  • Android:如何处理按钮点击

    在非 Java 和非 Android 领域拥有丰富的经验 我正在学习 Android 我对不同的领域有很多困惑 其中之一是如何处理按钮点击 至少有 4 种方法可以做到这一点 它们被简要列出here 为了保持一致性 我将列出它们 拥有以下成员
  • 有没有人尝试过在 Ubuntu(最好是 Ubuntu 9)上从源代码安装 ruby​​ 和 ruby​​gems?

    Ruby on Rails 网站建议在 Linux 下从源代码安装 Ruby 我在全新安装的 Ubuntu 9 上从源代码构建 ruby 时遇到了许多 C 库问题 我在网上找到的有关在 Ubuntu 上安装 ruby 的所有说明都涉及使用预
  • 如何将日期“缩短”半个月[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 函数 cut 提供了一种按 月 周 季度 剪切日期数据的简单方法 但我想按半个月剪切日期数据 有没有简单的方法可以做到这一点 假设您指的是天文学意义上的半个月 其中第 1 15 天属于
  • 如何将数组存储为 Perl 散列中的值?

    我正在尝试在 Perl 中创建一个散列 其值是数组 就像是 my array split 1 2 my hash a gt array 令人惊讶的是 这个报告 使用 Data Dumper VAR1 a gt 1 2 gt undef 这一
  • Firebase 或 SQLite [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我是 Android 开发新手 目前正在开发一个使用 SQLite 作为数据库的应用程序 问题是 我想与使用该应用程序的其他人共享信息 据我所知 单
  • 如何推迟内联Javascript?

    我有以下 html 代码
  • 停止模式 UIViewController 旋转

    模态UIViewController的父级自动旋转 但是当模态 VC 启动时 我只希望它以纵向显示而不是可旋转 我试过简单地返回 NOshouldAutorotate 在模态VC中 但没有欢乐 支持 iOS 5 非常感谢任何帮助 基本上 如
  • 如何创建类似于 Xcode 属性面板的选项卡式面板

    我正在尝试创建一个类似于 Xcode 属性面板的选项卡式面板 但标准选项卡式面板似乎具有不同的外观和感觉 无法更改它 应使用哪些控件来创建外观相似的选项卡式面板 编辑 我没有使用 NSTabViewController 只是有 TabVie
  • Mongo 用户定义函数和 MapReduce

    mongodb 有没有办法创建用户定义的 Javascript 函数 我在客户端有几个 Map Reduce 函数 我想在其他 MR 函数中使用它们 例如 多个 MR 函数可以计算各种平均值 我希望能够像这样使用它们 function re
  • TypeScript 装饰器和循环依赖

    考虑使用装饰器的相互依赖代码示例 如下 现在考虑以下工作流程 是的 我确实想传递实际导出的类 因为我稍后需要使用它们 应用程序导入并运行Parent ts Test Child 导致应用程序导入Child ts装修时 注 班级Parent代