TypeScript系列:(三) 对象类型

本文详细探讨了TypeScript中的对象类型,包括属性修饰符(可选属性和只读属性)、索引签名、类型拓展(类型继承和类型交叉)以及泛型对象和数组类型(ReadonlyArray和Tuple Types)。通过对这些概念的深入理解,可以更好地掌握TypeScript的高级特性,提升代码质量。
摘要由CSDN通过智能技术生成

今天来聊聊TS中的那些对象类型----TypeScript系列:(三) 对象类型


对象是我们组织数据的基本方式。除了常规的对象类型外,TS还提供了只读数组元组属性修饰符索引签名等知识体系。在前面的章节中,我们已经了解到了对象的基本使用。可以用字面量interfacetype alias来规定一个普通的对象类型。现在是时候了解一下常用的对象属性修饰符、类型拓展、索引签名和内置的特殊对象类型了。 还没有对象吗?那就赶紧new一个吧!

一、属性修饰符

利用属性修饰符,我们可以增强对象的属性的约束。

1. ? 可选属性

可选属性我们在之前就已经有所了解。定义对象类型时,在属性名后面加上英文问号 “?” ,表示该属性可选。此后,该类型的对象里可以有这个属性,也可以没有。因此,该属性除了我们给它约束了的类型之外,还可能是undefined,从而引发某些问题。在之前的文章中提到过,这可以通过真值校验来进行类型缩减,或者给函数的形参设置默认值,从而解决。

// 其中gender为可选属性
interface Person {
   
  name: string,
  age: number,
  gender?: 1 | 2
}
// 可以有全部属性
const cc: Person = {
   
  name: "cc",
  age: 18,
  gender: 2
}

// 可以缺失可选属性
const yy: Person = {
   
  name: "yy",
  age: 18
}

2. readonly 只读属性

在对象的某个或某些属性前加上关键字 readonly,可以设置该属性为只读属性。对象的只读属性在TS里一般不允许被重新赋值。只读属性不意味着完全不能修改。如果只读属性是一个对象类型,那我们可以修改它里面的成员。

// id为只读属性,不允许重新赋值
interface Person {
   
  name: string,
  age: number,
  readonly idInfo: {
   
    id: string,
    addr: string
  }
}
// 可以有全部属性
const cc: Person = {
   
  name: "cc",
  age: 18,
  idInfo: {
   
    id: "42xxxx199x04xxxx1X",
    addr: "Wuhan"
  }
}

// 下面这句会报错,因为cc的id信息被设置为只读属性,不可以被重新哦
cc.idInfo = {
   id: "xiao cai ji", addr: "beijing"}
// 这样修改就可以啦
cc.idInfo.addr = "beijing"

然而事实上,在TS里我们依然有方法可以让只读属性被重新赋值。由于TS的类型检查机制,在检查两个对象类型是否兼容时,只针对类型,而不会去检测属性是否有 readonly 。例如,下面这两个对象类型是完全相互兼容的。

// id为只读属性,不允许重新赋值
interface Person {
   
  readonly name: string,
  readonly age: number,
  readonly idInfo: {
   
    id: string,
    addr: string
  }
}
// 没有readonly属性,所有成员都可以被赋值
interface People {
   
  name: string,
  age: number,
  idInfo: {
   
    id: string,
    addr: string
  }
}

// 注意Person的属性是只读的
let person: Person = {
   
  na
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值