TypeScript 中如何支持 class-private 属性

阅读时长 6 分钟读完

在 TypeScript 中,我们经常会使用类来声明对象,而类的属性大多都是 public 的。但是有时候,我们希望某些属性只能在类的内部使用,而不能被类的外部访问到,这就需要使用 class-private 属性。

什么是 class-private 属性

在 JavaScript 中,没有真正的私有属性或方法。但是 TypeScript 可以通过在属性或方法前添加 private 关键字来模拟私有属性或方法。

上面的代码中,myPrivatePropertymyPrivateMethod 都被声明为了私有的。这意味着只能在类的内部访问它们。

支持 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

纠错
反馈

纠错反馈