仅将 class 作为打字稿定义文件中的类型导出

Exporting a class ONLY as a type in a typescript definition file

假设你有一个名为 my-lib 的 ES6 库,就像这个

export class Foo {
   ...
   createBar() {
      return new Bar();
   }
   ...
}
class Bar() {
   method1() {}
   method2() {}
   method3() {}
}

并且您必须像这样为上述库编写打字稿定义。

export class Foo() {
    ...
    public createBar():Bar;
}
export class Bar() {
   method1(): void
   method2(): void
   method3(): void
}

我的问题是: Bar class 应该导出吗?

如果是那么写下面的代码

import { Bar } from 'my-lib'

将导致声明一个未定义的 Bar 变量

如果不是,那么下面的说法是不正确的,因为Bar没有导入

const foo = new Foo()
const bar: Bar = foo.createBar();

我应该如何定义 Bar class 以便将其导出为类型而不是 class?

我不确定我是否理解你想要实现的目标,但如果你不想直接公开你的 class 而只公开它的 'shape' (类型),你可以定义它作为界面。

export class Foo {
    createBar(): IBar {
        return new Bar();
    }
}

class Bar {
    method1() { }
    method2() { return 'test'; }
    method3() { return true; }
}

export interface IBar {
    method1: () => void,
    method2: () => string,
    method3: () => boolean,
}

const foo = new Foo()
const bar: IBar = foo.createBar();

然后只导入 Foo 和 IBar。