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关键字:实现接口定义的约束,但允许有额外的,属于自己内部的方法和属性

以上。

作者:致爱丽丝
本文版权归作者和博客园共有,欢迎转载,但必须在文章页面给出原文链接并标名原文作者,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/hjk1124/p/14408595.html