ts-4: 类型别名与interface
类型别名与interface都可以认为是对'参数'的封装,开发者预先声明一个变量types并对其定义内部数据的数据类型和key,之后就可以在接下来的开发中对这个types变量进行使用。
一:类型别名 (type alias)
//声明一个type
type Alice = {
name : string,
age : number
}
//使用这个type
const alice : Aclice = {
name : '小蛮',
age : 18
}
二:interface
如果type基本体现了封装参数的思想,那么interface就是对封装参数的完美体现
相较于type可以不用对象格式定义数据,interface规定必须使用对象,且对于参数的可选择性也有了更严谨的拓展:
// 新建一个接口
interface person {
name : string,
age : number ,
height : number ,
hobby ?: (string)[], // key后跟问号:表示可选,使用该key前必须确保数据中有该key
[propname:string] : any , //本行表示允许使用基于person的接口时可以拓展更多属性
sayHi():string, // 定义了一个sayHi方法,它的返回值为string类型
readonly id : number // readonly关键字表示该属性只读,只读的约束存在于第一次给**对象赋值**的时候,而不是第一次给只读属性赋值的时候
}
const xiaoman = {
name : 'xiaoman',
age:20,
height:180,
hobby:['打球'],
school:'哈工大',
id:0,
sayHi(){
return 'hello,world'
}
}
//使用这个接口
const gitXM = function (xiaoman : person){
xiaoman.name && console.log(xiaoman.name)
xiaoman.age && console.log(xiaoman.age)
xiaoman.height && console.log(xiaoman.height)
xiaoman.hobby && console.log(xiaoman.hobby[0])
xiaoman.school && console.log(xiaoman.school)
}
gitXM(xiaoman)
关于接口的拓展
一个接口本身只能定义一段约束,而不能实现这个约束本身。换句话说,这个接口只能定义而不能实现,想要实现则需要一个实例来实现
implements关键字:完全实现该接口定义的约束,不能修改
extends关键字:实现接口定义的约束,但允许有额外的,属于自己内部的方法和属性
以上。