typescript接口和对象类型

54 阅读1分钟

在typescript中定义对象使用interface(接口),可以理解interface是定义一种约束,使数据结构满足规定格式

//这样写是会报错的 因为我们在person定义了name,age但是对象里面缺少age属性
//使用接口约束的时候不能多一个属性也不能少一个属性
//必须与接口保持一致
interface Person {
    name:string,
    age:number
}

const person:Person  = {
    name:"213"
}


重名、继承

//重名interface会合并
interface A{name:string}
interface A{age:number}
let x:A={name:'xx',age:20}
//继承
interface A{
    name:string
}
interface B extends A{
    age:number
}
let person:B = {
    age:18,
    name:"string"
}

可选属性 使用?操作符

//可选属性的含义是该属性可以不存在
//所以说这样写也是没问题的
interface Person {
    name?:string,
    age:number
}
const person:Person  = {
    age:23
}

任意属性 [propName: string]

需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集

//在这个例子当中我们看到接口中并没有定义C但是并没有报错
//应为我们定义了[propName: string]: any;
//允许添加新的任意属性
interface Person {
    name:string,
    age?:number,
    [propName: string]: string | undefined | number;
}
 
const person:Person  = {
    name:"张三",
    c:"123"
}

只读属性 readonly

readonly 不允许被复制,只能读取

interface Person {
  name?: string;
  readonly age: number;
  [propName: string]: string | undefined | number;
}

const person: Person = {
  age: 23,
  c: "123",
};

person.age = 34;//无法为“age”赋值,因为它是只读属性