JSDoc typedef module import in Typescript for dependency injection 的等价物是什么?

What is the equivalent of JSDoc typedef module import in Typescript for dependency injection?

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

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

简单的例子:假设我们有多个 classes 在他们自己的模块文件中。 类 A 和 B。 我们要声明 class B 需要 class 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作为类型。 问题是我需要为此实际导入 class 模块,但这不是我想要做的。

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

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

import type A from './A';

export default class B {
    a: A;
    
    constructor (a) {
        this.a = a
    }
}

import type only imports declarations to be used for type annotations and declarations. It always gets fully erased, so there’s no remnant of it at runtime