Class类
es6
class Person {
constructor() {}
}
ts
class Person {
// 在TypeScript是不允许直接在constructor 定义变量的 需要在constructor上面先声明
// 如果了定义了变量不用 也会报错 通常是给个默认值 或者 进行赋值
name: string
age: number
constructor(name: string, age: number) {
this.name = name
this.age = age
}
}
类的修饰符
public private protected
class Person {
// 使用public 修饰符 可以让你定义的变量 内部访问 也可以外部访问 如果不写默认就是public
public name: string
// 使用 private 修饰符 代表定义的变量私有的只能在内部访问 不能在外部访问
private age: number
// 使用 protected 修饰符 代表定义的变量私有的只能在内部和继承的子类中访问 不能在外部访问
protected data: any
constructor(name: string, age: number, data: any) {
this.name = name
this.age = age
this.data = data
}
}
static 静态属性 和 静态方法
class Person {
static name: string = 'mk'
constructor() {
this.name // error 用static 定义的属性 不可以通过this 去访问 只能通过类名去调用
}
}
Person.name // 0k
如果两个函数都是static 静态的是可以通过this互相调用
class {
static run() {
return this.sing()
}
static sing() {
return 'sing'
}
}
static 静态函数 同样也是不能通过this 去调用 也是通过类名去调用
interface 定义 类
interface Person {
get(type: boolean): boolean
}
interface Person2 {
set(): void
name: string
}
class A {
age: number
constructor() {
this.age = 18
}
}
class P extends A implements Person, Person2 {
name: string
constructor() {
super()
this.name= 'mk'
}
get(type: boolean) {
return type
}
set() {}
}
interface 定义类 使用关键字 implements 后面跟interface的名字多个用逗号隔开 继承还是用extends
抽象类
abstract class A {
public name: string
}
new A() // error 抽象类无法被实例化
我们定义的抽象方法必须在派生类实现
abstract class A {
name: string
constructor(name: string) {
this.name = name
}
print(): string {
return this.name
}
abstract getName(): string
}
class B extends A {
constructor() {
super('mk')
}
getName(): string {
return this.name
}
}
const b = new B()