day165-TypeScript基础小记-类

要点

  1. 类类型
  2. 类静态部分和实例部分的区别
  3. 直接操作类的静态部分
  4. 使用类表达式直接操作类的静态部分

类类型

强制一个类去符合
实现接口

interface ClockInterface {
currentTime: Date
}
class Clock implements ClockInterface {
currentTime: Date = new Date()
constructor(h: number, m: number) {}
}
interface ClockInterface {
currentTime: Date
setTime(d: Date): void
}

接口描述类的公共部分

interface ClockInterface {
currentTime: Date
// 在接口中描述一个方法,在类里实现
setTime(d: Date): void
}
class Clock implements ClockInterface {
currentTime: Date = new Date()
setTime(d: Date) {
this.currentTime = d
}
constructor(h: number, m: number) {}
}

类静态部分和实例部分的区别

interface ClockConstructor {
// h: hour, m: minute
/** 构造器 */
new (h: number, m: number)
}
// 类实现接口时,只对实例部分进行类型检查。而constructor存在于类的静态部分
class Clock implements ClockConstructor {
currentTime: Date
// 缺少构造函数实现。ts(2390)
// constructor(h: number, m: number)
}

直接操作类的静态部分

定义两个接口,分别为构造函数实例方法所用

interface ClockConstructor {
new (h: number, m: number): ClockInterface
}
interface ClockInterface {
tick(): void
}
/** ClockConstructor为构造函数所用 */
function createClock (ctor: ClockConstructor, h: number, m: number): ClockInterface {
return new ctor(h, m)
}
/** ClockInterface为实例方法所用 */
class DigitalClock implements ClockInterface {
constructor(h: number, m: number) {}
tick () {
console.log('beep')
}
}
class AnalogClock implements ClockInterface {
constructor(h: number, m: number) {}
tick () {
console.log('tick tock')
}
}
let digital = createClock(DigitalClock, 12, 17)
// 检查AnalogClock是否符合构造函数签名
let analog = createClock(AnalogClock, 7, 32)

使用类表达式直接操作类的静态部分

interface ClockConstructor {
new (h: number, m: number)
}
interface ClockInterface {
tick()
}
const Clock: ClockConstructor = class Clock implements ClockInterface {
constructor(h: number, m: number) {}
tick () {
console.log('beep')
}
}
文章作者: lmislm
文章链接: http://lmislm.com/2019/06/27/2019-06-27/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LMISLMのBlog