TypeScript 中的自定义对象类型 - 接口的使用

说明

在面向对象的程序设计中,类和对象是常用的概念。
类 : 是指对某一类具有相同特征事务的模板抽象;
对象 :是指某一类的某一个具体的对象。
例如 : 学生是一个大类,每个学生拥有 学号、姓名、年龄 等属性,这些都是每个学生共有的特征;
小明是一名学生,也就是 学生的一个具体的对象。

在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'
}

你可能感兴趣的:(TypeScript,typescript,接口,自定义对象类型)