😀
在TypeScript中,对象类型是描述数据结构的核心工具。通过对象类型,我们可以定义具有特定属性和行为的对象,使代码更加健壮和易维护。本文主要探讨TypeScript中的对象类型、属性修饰符、索引签名、扩展类型等内容。

📝 关键内容

  • 对象类型
    • 匿名对象类型
    • 接口与类型别名
  • 属性修饰符
    • 可选属性
    • 只读属性
  • 索引签名
  • 多余属性检查
  • 扩展类型
    • 接口继承
    • 交叉类型

🤌 对象类型

对象类型有三种方式声明,分别是通过匿名声明、接口、类型别名声明。
  • 匿名对象类型
  • 接口:
  • 类型别名:

😋 属性修饰符

对象类型中的每个属性可以指定类型,并且表明其是否可选以及是否只读。
  • 可选属性:类比kotlin中的可选参数
  • 只读属性:readonly
    • 标记为只读的属性在类型检查时不能被写入。

👏 索引签名-Index Signatures

  • 有时我们无法提前知道类型的所有属性名,但知道值的类型。可以使用索引签名:

😇 多余属性检查

在TypeScript中,多余属性检查是一个强大的特性,它在将对象字面量分配给类型时提供额外的类型安全检查。这个特性能确保在为函数或变量提供一个对象字面量时,对象只能包含目标类型预期的属性。

示例说明

  • 假设我们有一个接口SquareConfig,用来定义一个正方形的配置,它可能包含颜色和宽度:
  • 我们定义一个函数createSquare,它接受一个SquareConfig类型的对象,并返回一个包含颜色和面积的对象:
  • 如果我们尝试使用以下代码调用createSquare函数,TypeScript编译器会提示错误,因为colour属性在SquareConfig类型中不存在:

如何解决多余属性检查的错误

  • 使用类型断言:以通过类型断言告诉TypeScript,你知道你在做什么,即使对象字面量中包含了目标类型中不存在的属性:
    • 添加字符串索引签名:如果你预计一个对象可能有额外的属性并且你不想TypeScript报错,你可以在接口中添加一个字符串索引签名:
      • 将对象分配给另一个变量:TypeScript不会对非直接赋值给类型的对象进行多余属性检查。如果你将对象先分配给一个变量再传递,TypeScript就不会报错:

        🤔 扩展类型

        接口继承-extends

        • 单继承:
        • 多继承:

        交叉类型

        • 交叉类型,可以用于组合现有对象类型:

        🤗 总结归纳

        TypeScript中的对象类型提供了强大的工具来描述和操作数据结构。通过属性修饰符、索引签名、扩展类型等,我们可以创建灵活且安全的代码。

        📎 参考文章

        💡
        本篇文章,主要内容是借助GPT的文本写作能力,以及对官方关于对象类型内容的整理而来的。
        TypeScript——泛型TypeScript——类型收缩与类型守卫
        Loading...