对象的类型–接口(接口在ts中的作用之一)
TypeScript 中的接口是一个非常灵活的概念,除了可用于对类的一部分行为进行抽象以外,也常用于对对象的形状进行描述。此篇主要学习对对象的形状进行描述.
- 接口的定义及使用
interface Person{ //定义接口
name:string,
age:number
}
let tom:Person = { //可以使用
name:"tom",
age:18
}
let merry:Person = { //少一个属性,不行,报错
name:"merry"
}
let lisi:Person = { //多一个属性不行,报错
name:"lisi",
age:18,
height:180
}
为对象指定类型时,必须与接口的’形状’一模一样,多一个少一个都会报错。
- 定义接口的可选属性
有的时候我们不想要跟接口的属性一摸一样,就可以给接口用?号定义可选属性。
interface Person{
name:string,
age:number,
height?:number //可选属性
}
let Tom:Person = {
name:"tom",
age:18
}
let Marry:Person = {
name:"Marry",
age:18,
height:180
}
console.log(Tom);
console.log(Marry);
- 定义接口的任意属性
[propName: string]: any; //任意属性的形式
小例子:
interface Person1{
name:string,
age?:number,
[propName:string]:any
}
let timi:Person1 = {
name:"timi",
age:18,
height:180,
width:270
}
console.log(timi);
需要注意:
- 确定属性与可选属性必须是任意属性数据类型的子集,否则报错。
- 定义任意属性后,可添加的任意属性不止一个。
- 定义只读属性。
需要注意:只读的约束存在于第一次给对象赋值的时候,而不是第一次给只读属性赋值的时候,还有就是给对象赋值的时候,必须给只读属性赋值。
定义方式:属性前加readonly
interface Pers{
readonly name:string,
age?:number,
[propName:string]:any
}
let dog:Pers={ //正常
name:"dog"
}
let cat:Pers={ //报错
age:18
}