TypeScript中文手册
4,类
### 4.1 定义 ```typescript class Greeter { greeting: string; //属性 constructor(message: string) { //构造函数 this.greeting = message; //this访问类的成员 } greet() { //方法 return "Hello, " + this.greeting; } } let greeter = new Greeter("world"); //new构造类的一个实例 ``` ### 4.2 继承 ```typescript class Animal { name: string; constructor(theName: string) { this.name = theName; } move(distanceInMeters: number = 0) { console.log(`${this.name} moved ${distanceInMeters}m.`); } } class Snake extends Animal { //派生类包含了一个构造函数,它必须调用super(),它会执行基类的构造函数 //而且,在构造函数里访问this的属性之前,我们一定要调用super() constructor(name: string) { super(name); } move(distanceInMeters = 5) { console.log("Slithering..."); super.move(distanceInMeters); } } class Horse extends Animal { constructor(name: string) { super(name); } move(distanceInMeters = 45) { console.log("Galloping..."); super.move(distanceInMeters); } } ``` ### 4.3 公共,私有与受保护的修饰符 - public:默认 - private:private成员不能在声明它的类的外部访问 - protected:`protected`成员在派生类中仍然可以访问 ### 4.4 属性 - readonly 只读属性:你可以使用`readonly`关键字将属性设置为只读的。 只读属性必须在声明时或构造函数里被初始化 ```typescript class Animal { constructor(private name: string) { } //参数属性通过给构造函数参数添加一个访问限定符来声明 move(distanceInMeters: number) { console.log(`${this.name} moved ${distanceInMeters}m.`); } } ``` - static 静态属性:性存在于类本身上面而不是类的实例上,使用`this.`前缀来访问 ```typescript class Grid { static origin = {x: 0, y: 0}; constructor (public scale: number) { } } ``` ### 4.5 存取器 ```typescript let passcode = "secret passcode"; class Employee { private _fullName: string; get fullName(): string { return this._fullName; } set fullName(newName: string) { if (passcode && passcode == "secret passcode") { this._fullName = newName; } else { console.log("Error: Unauthorized update of employee!"); } } } let employee = new Employee(); employee.fullName = "Bob Smith"; if (employee.fullName) { alert(employee.fullName); } ``` ### 4.6 抽象类 - 抽象类做为其它派生类的基类使用。 它们一般不会直接被实例化。 不同于接口,抽象类可以包含成员的实现细节。 `abstract`关键字是用于定义抽象类和在抽象类内部定义抽象方法。 - 抽象类中的抽象方法不包含具体实现并且必须在派生类中实现。 抽象方法的语法与接口方法相似。 两者都是定义方法签名但不包含方法体。 然而,抽象方法必须包含`abstract`关键字并且可以包含访问修饰符。 ```typescript abstract class Animal { abstract makeSound(): void; move(): void { console.log('roaming the earch...'); } } ``` ### 4.7 高级技巧 ##### 4.7.2 构造函数 ```typescript class Greeter { static standardGreeting = "Hello, there"; greeting: string; greet() { if (this.greeting) { return "Hello, " + this.greeting; } else { return Greeter.standardGreeting; } } } let greeter1: Greeter; greeter1 = new Greeter(); console.log(greeter1.greet()); let greeterMaker: typeof Greeter = Greeter; greeterMaker.standardGreeting = "Hey there!"; let greeter2: Greeter = new greeterMaker(); console.log(greeter2.greet()); ``` ##### 4.7.1 把类当做接口使用 ```typescript class Point { x: number; y: number; } interface Point3d extends Point { z: number; } let point3d: Point3d = {x: 1, y: 2, z: 3}; ```
顶部
收展
底部
[TOC]
目录
1,基础类型
2,变量声明
3,接口
4,类
5,函数
6,泛型
7,枚举
8,类型推论
9,类型兼容性
10,高级类型
11,符号Symbols
12,Iterators(迭代)
13,模块
14,命名空间
15,模块解析