В настоящее время нет пакета internal
модификатора доступа в TS. Возможный обходной путь - использовать escape-люк для protected
/ private
доступа к члену класса:
class Foo {
protected f1 = "f1"
}
class Foo2 {
protected f2 = "f2"
public doSomething(foo: Foo) {
foo["f1"] // this works
}
}
Вы можете получить доступ к protected
члену из другого класса через доступ к свойству с обозначением в скобках.
Да, это работает. Этот обходной путь все еще будет скрывать protected
членов от других классов в целом. Предполагая, что Foo
и Foo2
находятся в одном пакете и, следовательно, имеют более сильную связь, они могут лучше знать детали реализации другого класса, такие как имя защищенного свойства. Таким образом, этот штрих должен быть действительным и с точки зрения архитектуры.
Если требуется больше безопасности, вы можете создать дополнительные типы Foo
и Foo2
для использования с API-интерфейсом publi c вашего подчиненного устройства. пакет, поэтому клиент даже не знает о данном классе:
class Foo implements FooPublic {
publicProp = 42
protected foo = "foo"
}
interface FooPublic {
publicProp: number // only publicProp is visible to client
}
Дополнительное примечание: Существует также правило ESLint с именем import/no-internal-modules
, которое принудительно устанавливает, что клиент не может import
ваш реальный класс из подмодуля.