如果我不在fooloadBartext之前加private,我相信默认情况下它们是public.

export class RandomComponent {
  @Input() foo: string;
  @Output() loadBar = new EventEmitter();
  text: string;
}

当组件中有public个时,是否有任何用例?

出于封装/安全的原因,我是否应该像下面这样为所有这些添加private

export class RandomComponent {
  @Input() private foo: string;
  @Output() private loadBar = new EventEmitter();
  private text: string;
}

谢谢

推荐答案

对于这个问题,有很多话要说,以下是我脑海中的第一个 idea :

首先也是最重要的一点是,请记住private只是一个编译时构造——它不能在运行时强制执行(有关讨论,请参阅herehere).因此,请不要认为private在安全方面有任何用处.这根本不是问题所在.

它是关于封装的,当你在你的组件上有一个字段或方法,你想封装在其中,明确它不应该从任何其他地方访问,那么你绝对应该把它设为private:这就是private的意义:It signals your intent无论你把它放在什么地方,都不应该从类外接触它.

public也是如此:它也是一个只在编译时使用的构造,因此,类成员在默认情况下为public的事实,虽然为真,但在运行时却完全没有意义.但是,当你有一个成员,你明确地打算把它作为你的类API的一部分公开给外界时,你绝对应该把它设为public来表明这个意图:这就是public的意义.

这通常适用于Typescript.具体来说,在组件类上拥有公共成员肯定有一些有效的用例:例如,当实现container/component(aka smart/dumb)模式时,"哑"子元素通过构造函数注入"智能"父元素,传达你的意图是非常重要的,关于家长成员应该和不应该被子元素触动的内容:否则,当你发现那些愚蠢的子元素在他们父母的wine 柜里鬼混时,不要感到惊讶.

那么,我对你的问题的回答是:

我应该像下面这样为所有人添加隐私吗?

是一个强调的no.你不应该加private,因为这样做会 destruct 关键字的目的,因为如果你把它放在任何地方,它就不再表示任何意图:你最好不要放在任何地方.

Typescript相关问答推荐

在Switch陈述中输入保护类

TypScript ' NoInfer '类型未按预期工作

为什么缩小封闭内部不适用于属性对象,但适用于声明的变量?

类型断言添加到类型而不是替换

TypeScript类型不匹配:在返回类型中处理已经声明的Promise Wrapper

使某些类型的字段变为可选字段'

如果一个变量不是never类型,我如何创建编译器错误?

使用ngrok解析Angular 时出现HTTP故障

如何缩小变量访问的对象属性范围?

material 表不渲染任何数据

状态更新后未触发特定元素的Reaction CSS转换

在不更改类型签名的情况下在数组并集上映射文字

有什么方法可以类型安全地包装import()函数吗?

如何将定义模型(在Vue 3.4中)用于输入以外的其他用途

为什么Typescript不能推断类型?

对象类型的TypeScrip隐式索引签名

字符串文字联合的分布式条件类型

使用RXJS获取数据的3种不同REST API

如何使用 AWS CDK 扩展默认 ALB 控制器策略?

带有 Select 器和映射器的Typescript 泛型