Typescript中类的公共访问修饰符的用途是什么?有什么区别
export class Thing { public doStuff(){} }
字符串和
export class Thing { doStuff(){} }
型看起来标准的tsc JS输出是完全一样的...
yi0zb3m41#
使用public的两个原因,一个是主观的/风格,另一个是客观的:1.这是一个代码内的文档。省略访问修饰符 * 可能 * 被认为是你忘记了它。(这是主观/风格的原因。)1.如果你想使用TypeScript添加到类构造函数的速记初始化功能,你需要public来告诉TypeScript这样做。下面是一个例子#2:
public
class Example { constructor(public name: string) { // ^^^^^^---------------- This is what triggers the feature } } const e = new Example("Joe"); console.log(e.name); // "Joe"
字符串
vd8tlhqk2#
你的示例代码在TypeScript中的含义完全相同。当你没有在成员定义上放置修饰符public,private或protected时,TypeScript将选择默认的修饰符,即public。这对JavaScript来说没有意义,因为TypeScript transplier将生成完全相同的代码。但是这些修饰符将帮助你封装你的类成员并使它们:
private
protected
同样,生成的JavaScript将不包含修饰符。这意味着如果有人获取了您的JavaScript代码,即使您将其定义为private,它也可以访问成员。修饰符仅在TypeScript中有用,并帮助开发人员不访问某些类成员。
tyky79it3#
这只是一种将方法设置为public的显式方式。默认情况下,TypeScript中的所有类方法/属性都是public类型,但为了清晰起见,您也可以在代码中注明这一点。你可以在Handbook中阅读更多关于它的信息,这里是一个摘录:默认为公共在我们的例子中,我们已经能够自由地访问我们在整个程序中声明的成员。如果你熟悉其他语言中的类,你可能已经注意到在上面的例子中我们不必使用public这个词来实现这一点;例如,C#要求每个成员显式地标记为public才能可见。在TypeScript中,每个成员默认为public。您仍然可以显式地将成员标记为public。
3条答案
按热度按时间yi0zb3m41#
使用
public
的两个原因,一个是主观的/风格,另一个是客观的:1.这是一个代码内的文档。省略访问修饰符 * 可能 * 被认为是你忘记了它。(这是主观/风格的原因。)
1.如果你想使用TypeScript添加到类构造函数的速记初始化功能,你需要
public
来告诉TypeScript这样做。下面是一个例子#2:
字符串
vd8tlhqk2#
你的示例代码在TypeScript中的含义完全相同。当你没有在成员定义上放置修饰符
public
,private
或protected
时,TypeScript将选择默认的修饰符,即public
。这对JavaScript来说没有意义,因为TypeScript transplier将生成完全相同的代码。但是这些修饰符将帮助你封装你的类成员并使它们:
public
private
protected
同样,生成的JavaScript将不包含修饰符。这意味着如果有人获取了您的JavaScript代码,即使您将其定义为
private
,它也可以访问成员。修饰符仅在TypeScript中有用,并帮助开发人员不访问某些类成员。tyky79it3#
这只是一种将方法设置为
public
的显式方式。默认情况下,TypeScript中的所有类方法/属性都是public类型,但为了清晰起见,您也可以在代码中注明这一点。你可以在Handbook中阅读更多关于它的信息,这里是一个摘录:
默认为公共
在我们的例子中,我们已经能够自由地访问我们在整个程序中声明的成员。如果你熟悉其他语言中的类,你可能已经注意到在上面的例子中我们不必使用public这个词来实现这一点;例如,C#要求每个成员显式地标记为public才能可见。在TypeScript中,每个成员默认为public。
您仍然可以显式地将成员标记为public。