原文:TypeScript基本知识点整理
零、序:
接口定义:接口是对传入参数进行约束;或者对类里面的属性和方法进行声明和约束,实现这个接口的类必须实现该接口里面属性和方法;typescript中的接口用interface关键字定义。
接口作用:接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里方法的实现细节,它只规定这批类里必须提供某些方法,提供这些方法的类就可以满足实际需要。typescrip中的接口类似于java,同时还增加了更灵活的接口类型,包括属性、函数、可索引和类等。
一、属性接口
对传入对象的约束,形式上很像 json 对象:
interface Sx {
name : string
age : number
}
function f8(peop:Sx) {
//name age 必须传递
console.log(peop)
}
const obj = {
name : 'liu',
age : 25
}
f8(obj)
注意 :
- 不允许添加接口中未定义的属性;
二、函数类型的接口
对方法传入的参数和返回值进行约束
interface Sta {
(difang: string, todo: string): string
}
let play: Sta = (difang: string, todo: string): string => {
return `我们去${difang}吃${todo}`
}
console.log(play('灞桥', '吃烧烤'))
三、可索引的接口
对索引和传入的参数的约束
//对数组的约束
interface UserArr {
//索引为number,参数为string
[index: number]: string
}
const arr: UserArr = ['a', 'b']
console.log(arr)
//对 对象的约束
interface UserObj {
[index: number]: number
}
const obj1: UserObj = { 2:1, 3:4 }
console.dir(obj1)
四、类的类型约束
interface Anmal {
//对类里面的属性和方法进行约束
name: string
eat(food:string): void
}
// 类实现接口要用implements , 子类必须实现接口里面声明的属性和方法
class Laoshu implements Anmal{
name: string
constructor(name: string) {
this.name = name
}
eat(food:string): void {
console.log(`${this.name}吃${food}`)
}
}
const lao: Laoshu = new Laoshu('老鼠')
lao.eat('粮食')
五、接口继承
interface Anmal {
//对类里面的属性和方法进行约束
name: string
eat(food:string): void
}
//实现LaoHu的这个接口,必须也要实现LaoHu继承的Anmal接口中的方法
interface LaoHu extends Anmal{
say (sa : string) : void
}
//继承并实现接口
class XiaoLaoHu implements LaoHu{
name : string
constructor (name : string) {
this.name = name
}
eat (food : string) : void {
console.log(`${this.name}吃${food}`)
}
say(sa: string): void {
console.log(`${this.name}说${sa}`)
}
}
const xiao : XiaoLaoHu = new XiaoLaoHu('老虎')
xiao.eat('肉')
xiao.say('你好')