如果未定义构造函数,则会自动创建具有空参数列表的默认构造函数。
可见性修饰符:private
、protected
和 public
继承类继承基类的字段和方法,但不继承构造函数。继承类可以新增定义字段和方法,也可以覆盖其基类定义的方法。基类也称为“父类”或“超类”。继承类也称为“派生类”或“子类”。
class Person {
name: string = ''
private _age = 0
get age(): number {
return this._age;
}
}
class Employee extends Person {
salary: number = 0
calculateTaxes(): number {
return this.salary * 0.42;
}
}
/* implements */
interface DateInterface {
now(): string;
}
// 包含implements子句的类必须实现列出的接口中定义的**所有方法**,但使用默认实现定义的方法除外。
class MyDate implements DateInterface {
now(): string {
// 在此实现
return 'now is now';
}
}
方法重载签名:通过重载签名,指定方法的不同调用。具体方法为,为同一个方法写入多个同名但签名不同的方法头,方法实现紧随其后。
class C {
foo(x: number): void; /* 第一个签名 */
foo(x: string): void; /* 第二个签名 */
foo(x: number | string): void { /* 实现签名 */
}
}
let c = new C();
c.foo(123); // OK,使用第一个签名
c.foo('aa'); // OK,使用第二个签名
/* 构造函数重载签名 */
class C {
constructor(x: number) /* 第一个签名 */
constructor(x: string) /* 第二个签名 */
constructor(x: number | string) { /* 实现签名 */
}
}
let c1 = new C(123); // OK,使用第一个签名
let c2 = new C('abc'); // OK,使用第二个签名
对象字面量,可以用来代替new表达式。let c: C = {n: 42, s: 'foo'};
Record<K, V>
类型的对象字面量
// 键值对
let map: Record<string, number> = {
'John': 25,
'Mary': 21,
}
map['John']; // 25
// 类型K可以是字符串类型或数值类型,而V可以是任何类型。
interface PersonInfo {
age: number
salary: number
}
let map: Record<string, PersonInfo> = {
'John': { age: 25, salary: 10},
'Mary': { age: 21, salary: 20}
}