1.interface接口
interface Idata {
key:string,
value:string|number
}
interface Iobj{
name:string
age?: number // 可选参数
data: Idata
[propName:string]?:any // 一些可能会有的额外的参数
}
const obj:Iobj={
name: ''
}
2.implements 类限制
interface Idata {
name: string
}
class Data implements Idata {
name:string // name必须要有,因为受到Idata接口的约束
}
// 如果要有多个约束,则以逗号进行分割 implements Idata,Idatas,...
3.装饰器
/**
target---class Person类
attr---- age属性
*/
const fn:Function =(name: string) =>{
return (target:any) => {
target.prototype.name = name
}
}
const agefn: Function(target: any, attr: string) => {
}
@fn('lisi') ---- 装饰器工厂
class Person {
@agefn --- 装饰器(属性装饰器)
age:number
constructor() {
},
@addMethod --- 装饰器(方法装饰器)
add(){}
}
// 注意:执行顺序是,先从上到下找到所有的装饰器工厂,执行其内部代码,并收集内部的装饰器函数,然后在从下到上执行装饰器函数
4.抽象类
// Person(抽象类)--- 此类可以被继承,但不能被实例化出来
abstract class Person {
......
}
class Student extends Preson {
super()
}