我有以下打字稿定义文件:
declare class Bar {
}
declare const exampleBar: Bar
declare function testBars(...bars: Array<Bar>): void
是否可以做到这一点,使用户无法创建Bar
类的任何新实例,而是只能使用exampleBar
对象?
答案 0 :(得分:2)
只需声明一个私有构造函数:
declare class Bar {
private constructor();
}
如果要从TypeScript源文件生成声明文件,并且需要调用构造函数(或定义Bar
的子类),则理想情况下,您只需标记构造函数{{1} },并使用@internal
编译器选项,但使用that doesn't work。您目前最好的选择可能是定义一个常量stripInternal
,该常量被强制转换为带有公共构造函数的类型,并标记该常量Bar
。
@internal
除了执行上述操作外,如果要阻止调用者手动创建与class Bar {
private constructor() {}
}
/** @internal */
const BarConstructor = <{new(): Bar}>Bar;
const exampleBar: Bar = new BarConstructor();
结构兼容的对象文字,请向Bar
添加一个虚拟私有属性。