在 TypeScript 中循环类型引用是一件坏事吗?

Is circular type reference a bad thing to do In TypeScript?

我遇到了下面的代码片段,其中包含对类型引用的循环导入依赖。

// Foo.ts
import { Bar } from './Bar';
export interface Foo {
  isBarOK: (bar: Bar) => boolean;
}

// Bar.ts
import { Foo } form './Foo';
export class Bar {
  protected readonly foo: Foo;
}

这是一个简化版本,但它解释了我遇到的情况。 tsc 编译代码没有问题,但我从 import/no-cycle ESLint 规则中得到警告。我们可以看到 FooBar 相互引用以进行键入。这是一种不好的做法吗?这意味着什么影响?

纯 typescript 文件不会输出到您的包中,因此您可以放心地忽略它。

但要小心 javascript 文件,循环导入可能会搞乱 tree shaking