TypeScript 如何使对象属性不可变

TypeScript 如何使对象属性不可变

在这篇文章中,我们将尝试理解如何在TypeScript中使对象属性不可变。JavaScript是一种高度动态和灵活的语言,因此在JavaScript中使对象属性不可变有点典型(虽然我们可以使用const数据类型来实现,但并不总是有效)。

所以在 TypeScript 中,我们将尝试使用一个叫做 readonly 的关键字来实现属性的不可变性。这个关键字可以使对象属性不可更改,即不可改变,只能访问而不能修改。

语法: 以下是在TypeScript中使用 readonly 关键字的语法:

class class_name {
    readonly property_name : string
    ...
}

现在您已经有了一些关于实现此关键字的基本概念,让我们来看一些可以使用此 readonly 关键字的示例。

示例1: 在这个示例中,我们将创建一个由几个属性组成的类,然后尝试读取属性值并尝试更新这些值,并将结果显示在控制台中。

Javascript

<script> 
    class UserDetails { 
        readonly name: string 
        readonly city: string 
        readonly phoneNo: number 
        constructor(name: string, city: string, phoneNo: number){ 
            this.name = name 
            this.city = city 
            this.phoneNo = phoneNo 
        }   
    } 
      
    let user1 = new UserDetails("ABCD", "XYZ", 1234567890); 
    let user2 = new UserDetails("APPLE", "PQR", 1269785100); 
      
    // Printing values 
    console.log(user1.city); 
    console.log(user2.city); 
    console.log(user1.phoneNo); 
      
    // user1.city = "ABCDEF"; Not possible will result in error 
</script>

输出:

XYZ
PQR
1234567890

示例2: 在这个示例中,我们将创建一个接口,然后进一步使用该接口创建一个对象,并为其分配一些值,其中一些是只读的,然后尝试更新一些值,并在控制台中可视化结果。

JavaScript

<script> 
    interface UserDetails { 
        readonly firstName: string; 
        lastName: string; 
    } 
      
    let user: UserDetails = { 
        firstName: "Aman", 
        lastName: "XYZ", 
    }; 
      
    // Printing user object values before it is changed 
    console.log(user); 
      
    user.lastName = "Singla"; 
      
    // Printing user object values after it is changed 
    console.log(user); 
      
    // user.firstName = "APPLE"; Cannot assign  
    // value to firstName because it is a 
    // read-only property. 
</script>

输出:

{ firstName: 'Aman', lastName: 'XYZ' }
{ firstName: 'Aman', lastName: 'Singla' }

参考: https://www.typescriptlang.org/play#example/immutability

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程