TypeScript Learning 4 - 看看类

ts中的类基本符合ES6中的类,只是加了怎样对其中的类型检查,大概的点如下:

基础类结构

1
2
3
4
5
6
7
8
9
10
class Person {
name: string
constructor (theName: string) {
this.name = theName
}

sayHello () {
console.log(`hello ${this.name}`)
}
}

这里主要对相应的属性的进行了类型检查,如果想省略theName,可使用参数属性

1
2
3
4
5
6
7
8
9
class Person {
// 修饰符可使用所有合理的修饰符,这事必须的
constructor (public name: string) {
}

sayHello () {
console.log(`hello ${this.name}`)
}
}

修饰符

修饰符中readonly是只读属性,publicprivateprotected的区别主要集中在后面两个:

  • private是无法访问的,包括子类
  • protected只能在子类中访问
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Person {
constructor (protected name: string) {}
}

class Employee extends Person {
constructor (name: string, private department: string) {
super(name)
}

public getElevatorPitch() {
return `Hello, my name is ${this.name} and I work in ${this.department}.`
}
}

let howard = new Employee('Howard', 'Sales')
console.log(howard.getElevatorPitch())
// 属性“name”受保护,只能在类“Person”及其子类中访问
console.log(howard.name)

接口和类

接口和类主要有一下几点:

  • 类可以实现接口
  • 接口可以继承类
  • 接口只对类的实例部分做检查,静态部分是排除的,所以不要想直接用接口直接约束类的构造函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 类实现接口.
interface ClockInterface {
currentTime: Date
setTime(d: Date)
}

class Clock implements ClockInterface {
currentTime: Date
setTime(d: Date) {
this.currentTime = d
}
constructor(h: number, m: number) { }
}

// 接口继承类.
class Point {
x: number
y: number
}

interface Point3d extends Point {
z: number
}

let point3d: Point3d = {x: 1, y: 2, z: 3}

欢迎留言讨论 ^_^ ~