Во-первых: видимость проверяется только во время компиляции, поэтому имейте в виду, что нет способа выдать ошибку во время выполнения, если вы хотите заблокировать доступ к методу. Если это ваш вариант использования, попробуйте что-нибудь другое.
Если вы хотите проверить во время компиляции, то, что вам действительно нужно, это лучшие типы.
Итак, у вас есть класс Foo
:
class Foo {
method1() {}
method2() {}
}
Если в некоторых частях вашего кода вы не хотите, чтобы вызывался method1
, это просто означает, что вам нужно определить type
или interface
, который не есть такой метод.
type FooMethod2Only {
method2: () => void;
}
method1
невидимость в некоторых контекстах действительно означает, что вы работаете с типом, у которого нет этого метода.
Так что если вы используете функция как таковая:
function doSomething(foo: FooMethod2Only) {
foo.method1();
}
doSomething(new Foo());
Тогда машинопись будет жаловаться, потому что, несмотря на то, что Foo имеет method1
, тип аргумента не имеет его.
Поэтому вместо того, чтобы думать об этом в свойстве / видимость метода, думайте об этом как об использовании разных типов / интерфейсов для разных целей.