抽象类
js
// readonly的在类中的用法
class Person {
constructor(public readonly name: string) {}
}
let tom = new Person('tom')
// tom.name = 'chaos' // 报错,因为使用readonly关键字。(这点是跟存在get而不存在对应的set作用是一样的,readonly写起来简洁)
// 抽象类: 只能被继承,不能被实例化(abstract n.抽象)
abstract class Demo {
name: string
getName() {
return this.name
}
abstract getAge(): number // 抽象方法,继承时子类必须自己实现一下
}
class Demo1 extends Demo{
constructor(name: string) {
super()
this.name = name
}
// 实现抽象方法
getAge() {
return 18
}
}
// let tom = new Demo1('tom')
// console.log(tom.getName())
// interface 的继承(抽象)
interface Person {
name: string
}
// 【合二为一】
interface P1 extends Person{
age: number
}
function fn(person: P1) {
this.name = person.name
this.age = person.age
// this.sex = person.sex // 声明式对象就算传进来也没法用,还是会报错
}
let chaos = {name: 'chaos', age: 19}
fn(chaos)
let tom = {name: 'tom', age: 18, sex: 'man'}
fn(tom) // 声明式对象tom中sex属性多余,但是ts不报错
fn({name: 'tom', age: 18, sex: 'man'}) // 报错,传入非声明式对象时做了强校验,sex是多余的。