TypeScript 是 JavaScript 的一个超集,它通过引入静态类型系统来增强 JavaScript 的类型安全。掌握 TypeScript 的类型系统对于编写可维护、可扩展的代码至关重要。本文将带你从 TypeScript 的基础类型定义开始,逐步深入到高级技巧,帮助你全面掌握类型定义与类型保护。
一、TypeScript 基础类型
TypeScript 提供了一系列的基础类型,包括:
- 布尔值(boolean):表示真或假的值。
- 数字(number):表示数值。
- 字符串(string):表示文本。
- 数组(array):表示一组有序的元素。
- 元组(tuple):表示一个已知元素数量和类型的数组。
- 枚举(enum):为一组数值定义别名。
- 任意类型(any):表示可以赋值为任何类型的值。
- 未知类型(unknown):表示任何类型,但需要进一步断言。
- 空类型(null):表示空值。
- undefined:表示未定义的值。
示例:
let isDone: boolean = false;
let count: number = 10;
let msg: string = "Hello, TypeScript!";
let list: number[] = [1, 2, 3];
let x: [string, number];
x = ["Hello", 10]; // 正确
二、接口(Interfaces)
接口用于定义对象的形状,它描述了一个对象必须具有的属性和方法。
示例:
interface Person {
name: string;
age: number;
}
let tom: Person = {
name: "Tom",
age: 25
};
三、类型别名(Type Aliases)
类型别名可以给一个类型起一个新名字,方便代码阅读和理解。
示例:
type StringArray = string[];
let letters: StringArray = ["a", "b", "c"];
四、联合类型(Union Types)
联合类型表示变量可以具有多种类型中的一种。
示例:
let input: string | number = 123;
input = "Hello"; // 正确
五、类型保护(Type Guards)
类型保护用于检查一个变量是否属于某个特定的类型。
示例:
function isString(value: any): value is string {
return typeof value === "string";
}
let input = "Hello";
if (isString(input)) {
console.log(input.toUpperCase()); // 正确
}
六、高级技巧
- 泛型(Generics):泛型允许在定义函数、接口和类时使用类型参数,从而实现类型复用。
- 映射类型(Mapped Types):映射类型允许通过某种方式转换现有类型。
- 条件类型(Conditional Types):条件类型允许根据条件表达式返回不同的类型。
示例:
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("myString"); // output 类型为 string
七、总结
通过本文的学习,相信你已经对 TypeScript 的类型系统有了全面的认识。掌握类型定义与类型保护,将有助于你编写更安全、更易维护的代码。在后续的学习中,你可以继续深入研究 TypeScript 的更多高级特性,让你的代码更加强大。
