Ts总结8、对象类型(编译设置ExactOptionalPropertyTypes、编译器选项suppressExcessPropertyErrors关闭多余属性检查)

本文详细介绍了TypeScript中对象类型的相关概念,包括基础了解、可选属性、只读属性的两种写法、属性名的索引类型、结构赋值以及结构类型原则。同时,讨论了严格字面量检查和最小可选属性规则,并提到了如何关闭多余属性检查的编译设置。此外,文章还探讨了空对象在TypeScript中的特性及其使用场景。
摘要由CSDN通过智能技术生成
一、基础了解

1、对象类型的最简单声明方法,就是使用大括号表示对象,在大括号内部声明每个属性和方法的类型

const obj:{
  x:number;
  y:number;
} = { x: 1, y: 1 };


// 对象obj的类型就写在变量名后面,使用大括号描述,内部声明每个属性的属性名和类型。

2.属性的类型可以用分号结尾,也可以用逗号结尾

// 属性类型以分号结尾
type MyObj = {
  x:number;
  y:number;
};

// 属性类型以逗号结尾
type MyObj = {
  x:number,
  y:number,
};

3.一旦声明了类型,对象赋值时,就不能缺少指定的属性,也不能有多余的属性。

type MyObj = {
  x:number;
  y:number;
};

const o1:MyObj = { x: 1 }; // 报错
const o2:MyObj = { x: 1, y: 1, z: 1 }; // 报错

// 变量o1缺少了属性y,变量o2多出了属性z,都会报错。

4.读写不存在的属性也会报错;也不能删除类型声明中存在的属性修改属性值是可以的

const obj:{
  x:number;
  y:number;
} = { x: 1, y: 1 };

console.log(obj.z); // 报错
obj.z = 1; // 报错
// 读写不存在的属性z都会报错



const myUser = {
  name: "Sabrina",
};

delete myUser.name // 报错:不能删除类型声明中存在的属性
myUser.name = "Cynthia"; // 正确:修改属性值是可以的

3.对象的方法使用函数类型描述

const obj:{
  x: number;
  y: number;
  add(x:number, y:number): number;
  // 或者写成
  // add: (x:number, y:number) => number;
} = {
  x: 1,
  y: 1,
  add(x, y) {
    return x + y;
  }
};

5.对象类型可以使用方括号读取属性的类型

type User = {
  name: string,
  age: number
};
type Name = User['name']; // string

6.除了使用type命令为对象声明一个别名,TS还提供了interface(接口)命令把对象类型提炼为一个接口

type Obj1 ={
    x: number;
    y: string
}

const objStr:Obj1 = {
    x: 1,
    y: 'obj1'
}

interface Obj2 {
    x:number;
    y:string
}

const obj2Str:Obj2 ={
    x:1,
    y:'obj2'
}
 
注意:
1.TS不分对象自身属性和继承属性,一律视为对象属性
interface MyInterface {
  toString(): string; // 继承的属性
  prop: number; // 自身的属性
}

const obj:MyInterface = { // 正确
  prop: 123,
};

// obj只写了prop属性,但是不报错。因为它可以继承原型上面的toString()方法。
2.用TS的对象声明方法用的const obj:{}:{}的形式;type命令定义别名的是type Obj = {};interface(接口)命令是 interface Obj {}
//对象声明类型方法
const obj:{
  x:number;
  y:number;
} = { x: 1, y: 1 };


// type命令声明
type Obj1 = {
    x: number;
    y: number
}
const Obj:Obj1 = { x: 1, y: 1 };


// interface(接口)命令定义类型
interface Obj2 {
    x:number;
    y:number
}

const obj:Obj2 = {
    x:1;
    y:1
}
二、可选属性:如果某属性是可选的(即可忽略的),需要在属性名后面加一个 

                
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值