在ts 中的class,不仅提供了class的语法功能,也是作为一种类型的存在
实例属性初始化
class Person {
age: number // 声明成员age
gender = '男' // 声明成员gender 并设置初始值
}
构造函数(constructor)
class Person {
// 初始化成员
name: string
age: number
// 需要为构造函数 参数 指定类型注解,否则会被隐式推断为any类型
constructor(name: string, age: number) {
// 需要初始化成员才可以通过this.name / this.age 访问
this.name = name
this.age = age
}
}
const person1 = new Person('帅哥', 19)
console.log(person1.age)
实例方法
方法的类型注解(参数和返回值)与函数相同
class Point {
x = 1
y = 2
scale(n: number): void {
this.x *= n
this.y *= n
}
}
const p1 = new Point()
p1.scale(10)
console.log(p1.x, p1.y) // 10 20
类的继承(extends)和实现接口(implements)
继承(extends)
class Animal {
move() {
console.log("动物大队集合")
}
}
class Dog extends Animal {
name = "二哈队长"
bark() {
console.log(this.name + "前来报到")
}
}
const dog = new Dog()
dog.move()//动物大队集合
dog.bark()//二哈队长前来报到
实现接口(implements)
interface Singable { // 定义接口
Sing(): void
Name: string
}
class Jack implements Singable {
// 实现接口 需要提供接口中的所有属性
Name = 'jack'
Sing(): void {
console.log(this.Name + '在唱歌')
}
}
const j = new Jack()
j.Sing()
class类的可见性修饰符
类成员可见性:可以使用TS可见性修饰符 来控制class方法或属性对于class外的代码是否可见 可见性修饰符包括:1、public(公有的) 2、protected(受保护的) 3、private(私有的)
- public:表示公有的,公开的,公有成员都可以访问(默认值,可以省略)
- protected:表示受保护的,仅对其声明所在的类和子类中可见(实例对象不可访问)
class Animal { protected move() { console.log("动物大队集合") } } class Dog extends Animal { name = "二哈队长" bark() { this.move() // 可以通过this访问 console.log(this.name + "前来报到") } } const dog = new Dog() //dog.move() 由于是受保护的,实例对象访问不了 dog.bark() - private:表示私有的,只在当前类中可以访问,对实例对象以及子类也是不可访问的
class Animal {
private move() {
console.log("动物大队集合")
}
walk() {
this.move() // 只可以在当前类中访问
}
}