【问题标题】:Why does nest.js use a factory to specify a type rather than the class itself?为什么 nest.js 使用工厂来指定类型而不是类本身?
【发布时间】:2022-12-01 08:26:29
【问题描述】:

在 Nest.JS 中经常看到这样的东西:

@SomeThing({ type: () => MyEntity })
class MyClass {}

这样做的目的是什么?它不能用于阻止事物运行,因为它是一个类引用,而不是一个实例,并且导入已经运行。我也不认为它是延迟加载,因为没有对它的延迟引用。

那么这种模式结束的原因是什么,说:

@SomeThing({ type: MyEntity })
class MyClass {}

我的目标是,我有一个巨大的元数据列表,其中包含这个 type 工厂作为属性,我需要它指向的基础实体。我想知道调用函数获取实体是否有缺点

例如

const targetClasses = someMetadata.map(meta => meta.targetFn()

【问题讨论】:

    标签: nestjs


    【解决方案1】:

    它实际上是为了延迟加载,但不一定是你想的原因。这是为了确保在循环引用时没有问题。如果 Nest 仅使用 type: MyEntityMyEntity 导入了 MyClass,那么这两个文件之一(或可能两个文件)都会将 type 显示为 undefined。通过允许使用工厂延迟解析类型,它确保类型值在那里。这也避免了仅通过统一 API 记住何时使用 type: Classtype: () => Class 的开销

    【讨论】:

      猜你喜欢
      • 2013-09-21
      • 1970-01-01
      • 2015-05-30
      • 2022-10-13
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多