在面向对象的程序设计中,类和对象是常用的概念。
类 : 是指对某一类具有相同特征事务的模板抽象;
对象 :是指某一类的某一个具体的对象。
例如 : 学生是一个大类,每个学生拥有 学号、姓名、年龄 等属性,这些都是每个学生共有的特征;
小明是一名学生,也就是 学生的一个具体的对象。
在TypeScript 中,也对此进行了抽象,抽象的方式叫做 接口 - interface。
格式 :
interface 类型名称 {
属性名1:类型,
属性名2:类型,
…
}
interface Student{
// 必须要有的属性
id:number,
name:string,
age:number,
}
根据接口中定义的属性进行赋值即可
let xiaoming : Student = {
id:1001,
name:'小明',
age:12,
}
在声明接口时,如果不特殊指明,则所有属性在声明变量的时候,都是必须要赋值的,否则会报错。
但是,有一些属性不是必须的,此时就用到了可选属性。
格式 :
interface 类型名称 {
属性名1:类型,
属性名2:类型,
可选属性1?:类型,
可选属性2?:类型
…
}
可选属性就是用 【?:】 进行标注。
接口定义
interface Student{
// 必须要有的属性
id:number,
name:string,
age:number,
// 可选的属性 : 赋值的时候可以不要
hobbit?:string,
}
对象定义
let xiaoming : Student = {
// 必须要写的属性
id:1001,
name:'小明',
age:12,
// 可选属性,也可以不写
hobbit:'没有爱好',
}
顾名思义,只读属性就是赋值之后不可以改变的属性。
比如 学生的身份证号,他是一个固定的值,永远都不会改变。(当然前提是赋初值的时候别给弄错了)
只读属性的格式 : 在属性前面加上 readonly 即可。
接口定义
interface Student{
// 必须要有的属性
id:number,
name:string,
age:number,
// 可选的属性 : 赋值的时候可以不要
hobbit?:string,
// 只读属性,不可以修改的
readonly cid:string,
}
对象定义
let xiaoming : Student = {
id:1001,
name:'小明',
age:12,
hobbit:'没有爱好',
// 只读属性,这个值在后面是不可以修改的
cid:'0000001'
}
// 下面的这种写法是 错误的,是不被允许的
// xiaoming.cid = '111222333';
问 : 什么是任意属性?
答 :任意属性就是一个我也不确定这个属性名称是啥,类型是啥,但是呢我又想留一个属性,以备后面使用的这么一个属性。
问 : 任意属性有什么特征呢?
答 :
1.一个接口中,只能有一个任意属性;
2.其他属性的类型,必须得是任意属性类型的子集,否则会报错;
3.任意属性的类型 可以是联合类型,以此来满足 【特性2】
4.任意属性的定义格式 : [propName:string]:类型1|类型2:类型3…
定义一个接口
interface Student{
// 必须要有的属性
id:number,
name:string,
age:number,
// 可选的属性 : 赋值的时候可以不要
hobbit?:string,
//任意属性 : 不确定属性名称/类型是什么,
// 一个接口中只能有一个任意类型
// 注意这个类型是有问题的,其他的属性类型必须是这个类型的子集,否则报错
// 可以使用联合类型
//[propName:string]:any
[propName:string]:string|number|undefined
}
定义一个对象
let xiaoming : Student = {
id:1001,
name:'小明',
age:12,
hobbit:'没有爱好',
// 下面两个属性就是 任意类型的属性
birthday:'2020-12-01',
a:'adbc'
}