在 TypeScript 中,我们经常会使用类来声明对象,而类的属性大多都是 public 的。但是有时候,我们希望某些属性只能在类的内部使用,而不能被类的外部访问到,这就需要使用 class-private 属性。
什么是 class-private 属性
在 JavaScript 中,没有真正的私有属性或方法。但是 TypeScript 可以通过在属性或方法前添加 private
关键字来模拟私有属性或方法。
class MyClass { private myPrivateProperty: string; private myPrivateMethod(): void { console.log("This is a private method!"); } }
上面的代码中,myPrivateProperty
和 myPrivateMethod
都被声明为了私有的。这意味着只能在类的内部访问它们。
支持 class-private 属性的原理
在 TypeScript 中,class-private 属性的真正实现其实是对属性名进行了特殊处理。在使用 class-private 属性时,它的名称会被编译成一个唯一的名称,这个名称只有在类的内部才能访问。
比如下面的代码:
-- -------------------- ---- ------- ----- ------- - ------- ------------------ ------- ------------- - ---------------------- - ------ -------- - ------ ----------------------- ------ - ------ ----------------------- - - ----- ----- - --- ---------- ------------------------------------------ -- ------- ------ ------- ------------------------------------- -- ------ -------- ------------------- -- ------- --- ---- ---------- ------ ----- ------------------展开代码
在上面的代码中,我们定义了一个名为 myPrivateProperty
的私有属性,并提供了一个名为 getMyPrivateProperty()
的公共方法来返回私有属性的值。当我们试图直接访问私有属性时,TypeScript 会抛出一个错误。
那么具体是怎么实现的呢?我们可以用 TypeScript 的编译器来看一下编译后的代码:
-- -------------------- ---- ------- ---- -------- ----- ------- - ------------- - ------------------------------- - ------ -------- - ---------------------- - ------ -------------------------------- - - -------------------------- -- ------ -------- ------------------- -- ------- --- ---- ---------- ------ ----- ------------------ ----------------------------------- -- ------ -------- ---------------------------- -- ------- --- ---- ---------- ------ ----- ------------------展开代码
可以看出,TypeScript 为 myPrivateProperty
属性生成的实际属性名是 _MyClass_myPrivateProperty
,而且它是无法在类的外部访问的。
如何使用 class-private 属性
使用 class-private 属性并没有太多的技术含量,只需要在属性名前添加 private
关键字即可。下面来看一个完整的例子:
-- -------------------- ---- ------- ----- ----------- - ------- -------- -------------- ------- ------- -------- ------ - -- -------------------------- ------- - ------------------ - -------------- - ------ --------------- -------- ---- - ------------ -- ------- - ------ ---------------- -------- ---- - -- ------- -- ------------- - ------------ -- ------- - ---- - ------------------------- --------- - - ------ ------------------- ------ - ------ ------------------- - ------ ------------- ------ - ------ ------------- - - ----- ----------- - --- -------------------------- -------------------------- -------------------------------------- -- ------- ---- -------------------------- -------------------------------------- -- ------- --- --------------------------------------- -- ------ -------- --------------- -- ------- --- ---- ---------- ------ ----- --------------展开代码
在这个例子中,我们定义了一个银行账户类 BankAccount
,它有一个私有属性 accountNumber
和一个私有属性 balance
。通过公共方法 deposit()
和 withdraw()
,我们可以向账户中存款或取款。而公共方法 getAccountNumber()
和 getBalance()
则可以获取账户号和余额。但是,如果我们试图直接访问账户号,则会被 TypeScript 报错。
以上就是使用 TypeScript 中 class-private 属性的完整介绍和演示。希望对大家有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67b82f0c306f20b3a65beabb