TypeScript 进阶教程(一)
简介
在上一篇 TypeScript 入门教程中,我们了解了 TypeScript 的基础概念和语法。本篇进阶教程将深入介绍 TypeScript 的高级特性,包括类的继承与接口的继承,命名空间,枚举,类型别名,装饰器等内容。
类的继承与接口的继承
在 TypeScript 中,我们可以使用 extends 关键字来实现类的继承,从而复用现有的类的代码。语法如下所示:
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
run() {
console.log(`${this.name} is running.`);
}
}
class Student extends Person {
grade: number;
constructor(name: string, grade: number) {
super(name);
this.grade = grade;
}
study() {
console.log(`${this.name} is studying in ${this.grade} grade.`);
}
}
let stu = new Student("Tom", 6);
stu.run();
stu.study();
同样的,接口也可以使用 extends 关键字来进行继承:
interface IPerson {
name: string;
age: number;
}
interface IStudent extends IPerson {
grade: number;
}
let stu: IStudent = { name: "Tom", age: 12, grade: 6 }
命名空间
命名空间是 TypeScript 提供的一种避免全局命名冲突的机制。使用命名空间可以将代码模块化,并且可以避免不同模块之间的命名冲突。下面是一个简单的命名空间定义:
namespace MyNamespace {
export const PI: number = 3.14;
export function sayHello(name: string) {
console.log(`Hello, ${name}!`);
}
}
console.log(MyNamespace.PI);
MyNamespace.sayHello("Tom");
在命名空间中定义的成员必须通过 export 关键字进行暴露,才能在其他模块中使用。
枚举
枚举是 TypeScript 中常用的一种特殊数据类型,它可以为一组有限的取值建立一种命名方式。下面是一个简单的枚举定义:
enum Color {
Red,
Green,
Blue,
}
let c: Color = Color.Green;
console.log(c);
默认情况下,枚举类型的值从 0 开始递增,也可以手动指定枚举值的编号:
enum Color {
Red = 1,
Green,
Blue,
}
let c: Color = Color.Green;
console.log(c);
类型别名
类型别名可以为一个已有的类型定义一个新的名字,便于代码的复用和维护。下面是一个简单的类型别名定义:
type Name = string;
type Age = number;
interface Person {
name: Name;
age: Age;
}
let p: Person = { name: 'Tom', age: 12 };
console.log(p);
装饰器
装饰器是 TypeScript 中提供的一种特殊语法,用于在运行时修改类的行为。装饰器常用于扩展类的属性和方法、添加日志记录、错误检查等场景。下面是一个简单的装饰器定义:
function log(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Calling ${propertyKey} with`, args);
const result = originalMethod.apply(this, args);
console.log(`Called ${propertyKey} with the result`, result);
return result;
};
return descriptor;
}
class Calculator {
@log
add(x: number, y: number) {
return x + y;
}
}
const calc = new Calculator();
console.log(calc.add(1, 2));
该装饰器用于添加日志记录的功能,在执行类中的 add 方法时记录调用的参数和结果。我们可以使用 TypeScript 开发工具中的装饰器插件来查看装饰器的执行过程。
总结
通过本篇 TypeScript 进阶教程,我们学习了 TypeScript 的高级特性,例如类的继承和接口继承、命名空间、枚举、类型别名和装饰器等。了解和掌握这些特性可以使我们写出更加规范、可重用和易维护的 TypeScript 代码。另外,我们可以查看 TypeScript 官网中的文档和示例代码,深入了解 TypeScript 的各种特性和用法。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。