class类
TypeScript 全面支持 ES2015 中引入的 class 关键字,并为其添加了类型注解和其他语法(比如,可见性修饰符等)。
- TS 中的
class ,不仅提供了 class 的语法功能,也作为一种类型存在。
class Person {}
let p = new Person()
class Person {
name = '张三'
age: number
}
- 成员初始化后才可以通过
this 来访问 - 需要为构造函数的参数指定类型注解,否则会被隐式推断为any
- 构造函数不需要返回值类型
class People {
name: string
age: number
constructor (name: string, age:number) {
this.name = name
this.age = age
}
}
class People {
name: string
age: number
constructor (name: string, age:number) {
this.name = name
this.age = age
}
eat (food: string): void {
console.log('今天晚饭吃的是:', food)
}
}
继承
类继承的两种方式:1 extends (继承父类) 2 implements (实现接口)。js中只有extends ,而implement 是TS提供的
extends(继承父类)
class Animal {
belong = 'Animal'
eat () {
console.log('eat food')
}
}
class Dog extends Animal {
name = '汪星人'
run () {
console.log('跑')
}
}
const dog = new Dog()
console.log(dog);
dog.eat()
- . 通过
extends 关键字实现继承。 - 子类 Dog 继承父类 Animal,则 Dog 的实例对象 dog 就同时具有了父类 Animal 和 子类 Dog 的所有属性和方法
implements(实现接口)
interface Person {
race: string
eat (): void
}
class Singer implements Person {
race: '黄种人'
eat () {
console.log('我喜欢吃美食')
}
}
- 通过 implements 关键字让 class 实现接口。
- Singer 类实现接口 Person意味着,Singer 类中必须提供 Preson接口中指定的所有方法和属性
可见性修饰符
public(共有的)
public :表示公有的、公开的,公有成员可以被任何地方访问,默认可见性
class Person {
public eat () {
console.log('吃')
}
}
- 在类属性或方法前面添加 public 关键字,来修饰该属性或方法是共有的。
- 因为 public 是默认可见性,所以,可以直接省略。(除非特别强调要加,一般不加)
protected(受保护的)
protected :表示受保护的,仅对其声明所在类和子类中(非实例对象)可见。
class Person {
public eat () {
console.log('吃')
}
protected assets = 10000000
}
class China extends Person{
Live () {
console.log('I have', this.assets)
}
}
let obj = new China()
obj.Live()
- 在类属性或方法前面添加 protected 关键字,来修饰该属性或方法是受保护的。
- 在子类的方法内部可以通过 this 来访问父类中受保护的成员,但是,对实例不可见!
private(私有的)
private: 表示私有的,只在当前类中可见,对实例对象以及子类也是不可见的。
class Person {
public eat () {
console.log('吃')
}
protected assets = 10000000
private behavior () {
console.log('我是私有的')
}
constructor () {
this.behavior()
}
}
class China extends Person{
Live () {
console.log('I have', this.assets)
this.eat()
}
}
readonly只读修饰符
readonly :表示只读,用来防止在构造函数之外对属性进行赋值。
class Person {
readonly age: number = 18
constructor (age: number) {
this.age = age
}
setAge () {
}
}
- 使用
readonly 关键字修饰该属性是只读的,注意只能修饰属性 不能修饰方法。 - 注意:属性 age 后面的类型注解(比如,此处的 number)如果不加,则 age 的类型为 18 (字面量类型)。
- 接口或者 {} 表示的对象类型,也可以使用
readonly
|