• TypeScript对象类型


    废话不多说,还是挑点有营养的讲。

    对象类型

    1、匿名对象

    匿名对象类型是在定义变量时直接使用花括号{},来定义一个对象类型。

    const person: { name: string, age: number } = { name: 'John', age: 25 };

    2、接口类型

    使用接口来定义对象类型,可以使代码更加可读、易于维护

    1. interface Person {
    2. name: string;
    3. age: number;
    4. }
    5. const person: Person = { name: 'John', age: 25 };

    3、类别类型

    使用类型别名可以为对象类型定义简短、易读的名称。

    1. type Person = {
    2. name: string;
    3. age: number;
    4. }
    5. const person: Person = { name: 'John', age: 25 };

    4.快速模仿

    对象解构

    还是跟JS一样

    1. let person:{ownName:string,gender:string} = {
    2. ownName: "Semlinker",
    3. gender: "Male",
    4. };
    5. let { ownName, gender } = person;
    6. console.log(ownName)
    7. console.log(gender)

    对象属性

    1. 可选属性

    顾名思义,不是必须存在的属性。用?标识出来。

    1. interface Person {
    2. name: string;
    3. age?: number;
    4. gender?: string;
    5. }

    或者

    let player:{name:string,level?:number} = {name:'a'}

    2、只读属性

    TypeScript中,我们可以声明一个对象类型中的属性为只读属性,即该属性的值一旦被赋值就不能再被修改。

    1. type Student = {
    2. readonly name: string;
    3. age: number;
    4. }

    3. 索引签名

    对象类型可以包含索引签名,以支持在动态属性上访问属性值。索引签名允许您在对象类型中定义一个模式,该模式指定应该具有哪些属性和属性类型

    1. interface ExampleObject {
    2. [key: string]: string;
    3. }
    4. const exampleObject: ExampleObject = {
    5. name: "小星星",
    6. class: "小班",
    7. // ...
    8. };

    注意这里是[key:xxx]。这里代表exampleObject里的键名是字符串,值也是字符串。

    利用这个特性,我们可以创造出类数组对象:

    1. interface ExampleObject {
    2. [key: number]: string;
    3. }
    4. const exampleObject: ExampleObject = {
    5. 0: "value1",
    6. 1: "value2",
    7. // ...
    8. };
    9. 1

    规定只读属性

    1. interface ExampleObject {
    2. readonly [key: string]: string;
    3. }

    键值是联合类型:

    1. interface ExampleObject {
    2. [key: string]: string | number;
    3. }

    4.扩展类型

    TypeScript中的对象类型是通过接口来定义的,接口可以扩展其他接口,从而实现对象类型的扩展。

    1. interface Person {
    2. name: string;
    3. age: number;
    4. }
    5. interface Student extends Person {
    6. school: string;
    7. grade: string;
    8. }

    5.交叉类型(&)

    看前面推文。

    交叉类型和interface的extends扩展类型的区别

    与交叉类型相比,使用interface的extends扩展类型可以实现类似的效果,但是它们的设计思想不同。extends用于在一个类型基础上扩展属性和方法,而交叉类型则是将多个类型合并起来以创建一个新的类型。

    6.泛型对象类型

    泛型具体的内容可以看我的其他推文。

    泛型对象类型可以用于对象属性中的类型声明。例如,以下代码定义了一个对象类型,该对象具有不同类型的属性:

    1. interface List {
    2. data: T[]
    3. add: (item: T) => void
    4. }
    5. const list1: List<string> = {
    6. data: ['hello', 'world'],
    7. add(item) {
    8. this.data.push(item)
    9. }
    10. }
    11. const list2: List<number> = {
    12. data: [1, 2],
    13. add(item) {
    14. this.data.push(item)
    15. }
    16. }

    在上面的代码中,表示泛型对象类型,我们在List中使用了该类型,以声明data属性和add方法的参数和返回类型。

  • 相关阅读:
    AC8015笔记
    11.12 - 每日一题 - 408
    浅谈 synchronized 锁机制原理 与 Lock 锁机制
    C++数据结构与算法:布隆过滤器(Bloom Filter)原理与实现
    蓝桥杯刷题--python-12
    Calico 网络故障排查 calico/node is not ready: BIRD is not ready(指定Calico匹配网桥规则)
    Gazebo 控制实例
    基于OpenCV的轮廓检测(2)
    springMvc整合swagger
    羧基功能化咪唑基离子液体[CEBIM][PF6]改性普鲁士兰多糖的反应合成
  • 原文地址:https://blog.csdn.net/weixin_42274805/article/details/132789356