防止类在打字稿定义文件中外部使用

时间:2018-09-29 17:05:07

标签: typescript

我有以下打字稿定义文件:

declare class Bar {

}

declare const exampleBar: Bar

declare function testBars(...bars: Array<Bar>): void

是否可以做到这一点,使用户无法创建Bar类的任何新实例,而是只能使用exampleBar对象?

1 个答案:

答案 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添加一个虚拟私有属性。