本书未发布
class
类的定义
class Person {
// 实例属性
name: string = 'xiaoming'
// 静态属性 (类属性)
static age: number = 12
// 只读属性, 不能修改
readonly gender: string = '男'
// 静态只读属性, 不能修改
static readonly money: number = 0
// 定义实例方法
say() {
console.log('haha')
}
// 类方法
static walk() {
console.log('walk')
}
}
const p1 = new Person()
console.log(p1.name)
console.log(Person.age)
类的继承
要用
extends
来继承类, 同时, 如果想要重写父类的构造函数, 那么就需要先调用父类的构造函数// 调用父类中的构造函数 super() // 调用父类中的其他方法 super().方法名()
抽象类
用
abstract
来定义不能实例化对象, 只能用来被继承
抽象类中可以定义抽象方法
abstract class Animal { name: string constructor(name: string) { this.name = name } // 抽象方法, 没有方法体 // 抽象方法只能定义在抽象类中, 子类必须要重写抽象方法 abstract say(): void }
接口
用
interface
来定义, 实现接口的时候使用implements
接口是用来定义一个类的结构, 即用来定义一个类中应该包含哪些属性和方法
同时接口也可以当成类型声明去使用
可以在一个文件中定义多个相同名字的接口, 最后实现的时候, 是将所有接口中的属性和方法加到一块
interface myInterface { name: string age: string // 可选属性 gender?: string } let p: myInterface = { name: 'xiaoming', age: '12' }
接口实现
interface Radio { switchRadio(trigger: boolean): void } class Car implements Raido { switchRadio(trigger: boolean) { } }
属性
属性修饰符有
public
,private
,protected
private
表示只能在类中访问protected
表示可以在父类和子类中访问
属性存取器:
getter
和setter
, 可以用来设置和获取私有属性,ts
中也可以用下面的操作来设置和获取属性class Person { private gender: string get gender() { return this.gender } set gender(gender: string) { this.gender = gender } } const p1 = new Person() // 设置 p1.gender = '男' // 获取 console.log(p1.gender)
命名空间
namespace a {
function replaceClass(constructor: Function) {
// 下面的属性, 可以多, 但是不可以少
return class {
name: string,
eat: Function,
age: number,
constructor() {}
}
}
@replaceClass
class Person {
name: string,
eat: Function,
constructor() {}
}
let p: Person = new Person()
console.log(p.name)
}