仅将 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。
假设你有一个名为 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。