TypeScript 是 JavaScript 的一个超集,它添加了静态类型检查和基于类的面向对象编程特性。TypeScript 的类型系统是其核心特性之一,它可以帮助开发者编写更安全、更易于维护的代码。本文将深入探讨 TypeScript 的类型系统,从基础类型到复杂泛型,旨在帮助读者构建强大的类型系统。
基础类型
TypeScript 提供了一系列的基础类型,这些类型是构建复杂类型的基础。以下是一些常见的 TypeScript 基础类型:
布尔类型(Boolean)
let isDone: boolean = false;
数字类型(Number)
let age: number = 26;
字符串类型(String)
let name: string = "Alice";
字符类型(Character)
let gender: char = 'F';
任意类型(Any)
let notSure: any = 4;
notSure = "maybe a string instead";
Void 类型
function sayHello(): void {
console.log("Hello, world!");
}
Null 和 Undefined 类型
let u: undefined = undefined;
let n: null = null;
接口(Interfaces)
接口是一种类型声明,用于描述对象的形状。接口可以用来约束一个对象必须具有某些属性和方法。
interface Person {
name: string;
age: number;
}
let person: Person = {
name: "Bob",
age: 30
};
类(Classes)
类是面向对象编程中的核心概念。TypeScript 支持使用类来创建对象。
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
makeSound(): void {
console.log("Some sound");
}
}
let animal = new Animal("Dog");
animal.makeSound();
泛型(Generics)
泛型允许你在定义函数、接口和类时使用类型变量,从而在编译时提供类型检查。
泛型函数
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("myString");
泛型接口
interface GenericIdentityFn<T> {
(arg: T): T;
}
let myIdentity: GenericIdentityFn<number> = identity;
泛型类
class GenericNumber<T> {
zeroValue: T;
add: (x: T, y: T) => T;
}
let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };
高级类型
TypeScript 的类型系统还支持高级类型,如联合类型、交叉类型、映射类型和条件类型。
联合类型(Union Types)
let input: string | number;
input = "Hello";
input = 42;
交叉类型(Intersection Types)
interface Animal {
name: string;
}
interface Bear extends Animal {
honey: boolean;
}
let bear: Bear & Animal;
映射类型(Mapped Types)
type Partial<T> = {
[P in keyof T]?: T[P];
};
let partialPerson: Partial<Person> = {
name: "Alice"
};
条件类型(Conditional Types)
type T1 = "a" | "b";
type T2 = "c" | "d";
type Conditional<T> = T extends T1 ? string : T extends T2 ? number : any;
let result: Conditional<T1 | T2> = "a"; // 结果为 string
总结
TypeScript 的类型系统是构建强大、健壮代码的关键。通过理解并使用基础类型、接口、类、泛型以及高级类型,开发者可以编写出更安全、更易于维护的代码。本文旨在为读者提供一个全面的 TypeScript 类型系统指南,帮助他们在实际项目中更好地利用 TypeScript 的类型特性。
