gpt4 book ai didi

typescript :私有(private)类,对不同文件中同一模块中的类可见

转载 作者:搜寻专家 更新时间:2023-10-30 21:43:28 24 4
gpt4 key购买 nike

我的项目使用“多文件内部模块”方法。在构建期间,所有内容都被编译到一个 Javascript 文件中。

仍然困扰我的一件事是,我找不到一种方法来拥有私有(private)模块级类(未导出到定义文件),这些类仍然可见并且可以被驻留在单独文件中的同一模块中的类使用(即C# 内部类)。有什么建议吗?

Foo.ts:

module shared {
class Foo {
}
}

Bar.ts:

module shared {
export class Bar {
constructor() {
this.foo = new shared.Foo();
}
}
}

Baz.ts:

module shared {
export class Baz {
constructor() {
this.foo = new shared.Foo();
}
}
}

最佳答案

对此没有语言方面的解决方案。出现这种情况的原因有两个方面 - 您的代码的使用者看到了什么,以及 JavaScript 是如何发出的。

从发射端看,shared::Fooshared 对象的导出成员,或者不是。如果不导出,shared:Baz 将看不到它,也无法使用它。因此,模块中的任何“内部”类显然都需要根据 emit 导出。

从消费的角度来看,这里有一个微妙的危险。假设这件事发生了:

// ** YourCode.d.ts **
declare module shared {
class Bar { ... }
class Baz { ... }
}

// ** SomeConsumer.ts **
// Hey, 'shared' is a good namespace!
module shared {
// My own personal Foo
export class Foo {
}
}

刚刚发生了什么?您的代码的用户刚刚踩到了 shared.Foo 成员而没有意识到。一切都会在运行时中断。破坏宇宙的危险成员集是一个未记录的雷区。

如果您有一些成员应该在外部使用而一些成员不应该在外部使用,那么最好的解决方案是使用一个名为 InternalImplementation 的嵌套模块来提供线索在消费者中,他们实际上不应该自己使用这些对象。

关于 typescript :私有(private)类,对不同文件中同一模块中的类可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28609751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com