【问题标题】:What is the equivalent of JSDoc typedef module import in Typescript for dependency injection?Typescript中用于依赖注入的JSDoc typedef模块导入等价物是什么?
【发布时间】:2021-02-14 06:21:11
【问题描述】:

我要解决的是在 Typescript 中声明依赖注入的问题。

我熟悉JSDoc,可以使用typedef import('./classModule.js').default myClass

简单示例:假设我们在自己的模块文件中有多个类。 A类和B类。 我们要声明类 B 需要一个类 A 的实例作为其构造函数中的依赖项。

// A.js

export default class A {
  //...
}
// B.js

// With jsdoc I can do
/**
 * @typedef {import ('./A').default} A
 */

export default class B {
  /**
   * @param {A} a
   */
  constructor (a) {
    this.a = a
  }
}

这很酷,它只是一个评论。没有实际的导入发生。

如何在 Typescript 中执行此操作?

据我所知,我可以使用typeof A 作为类型。 问题是我需要为此实际导入类模块,但这不是我想要做的。

我宁愿导入一些从我的类派生的接口。 因此在运行时,没有任何真正的依赖或导入。

【问题讨论】:

    标签: typescript types dependency-injection jsdoc


    【解决方案1】:

    您可以使用type-only import(在 TS 3.8 中引入):

    import type A from './A';
    
    export default class B {
        a: A;
        
        constructor (a) {
            this.a = a
        }
    }
    

    import type 只导入用于类型注释和声明的声明。它总是会被完全擦除,因此在运行时不会有任何残留

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2023-03-05
      • 2020-07-19
      • 2013-04-10
      • 1970-01-01
      • 2011-06-02
      相关资源
      最近更新 更多