在 JavaScript 的发展历程中,类型系统的缺失一直是一个痛点。TypeScript 正是为了解决这一痛点而诞生的。它是一种由 Microsoft 开发的开源编程语言,它是 JavaScript 的一个超集,添加了可选的静态类型和基于类的面向对象编程特性。掌握 TypeScript 的类型系统,能显著提升编码效率。以下是入门 TypeScript 类型系统的一些实用技巧。
一、TypeScript 基础类型
TypeScript 提供了丰富的基础类型,如:
- 数字 (number): 表示数值类型。
- 字符串 (string): 表示文本类型。
- 布尔 (boolean): 表示逻辑值。
- 数组 (array): 可以包含任意类型的元素。
- 元组 (tuple): 表示已知数量的元素和类型。
- 枚举 (enum): 定义一组命名的数字常量。
- 任意 (any): 表示可以赋值为任何类型。
- 未知 (unknown): 与
any类似,但类型系统不会对其进行推断。
示例代码:
let num: number = 42;
let str: string = "Hello, TypeScript!";
let bool: boolean = true;
let arr: number[] = [1, 2, 3];
let tuple: [string, number] = ["tuple", 42];
let enumVal: MyEnum = MyEnum.ONE;
let anyVal: any = 42;
let unknownVal: unknown = 42;
二、接口 (Interface)
接口用于定义对象的结构,它类似于其他语言的类。接口定义了一个对象必须拥有的属性和方法。
示例代码:
interface Person {
name: string;
age: number;
}
function introduce(person: Person): void {
console.log(`My name is ${person.name}, and I am ${person.age} years old.`);
}
const me: Person = { name: "Alice", age: 30 };
introduce(me);
三、类型别名 (Type Alias)
类型别名用于创建新的类型名称,以便在代码中复用。
示例代码:
type User = {
name: string;
age: number;
};
function introduce(user: User): void {
console.log(`My name is ${user.name}, and I am ${user.age} years old.`);
}
const me: User = { name: "Alice", age: 30 };
introduce(me);
四、泛型 (Generics)
泛型用于创建可复用的、类型安全的组件。
示例代码:
function getArray<T>(items: T[]): T[] {
return new Array<T>().concat(items);
}
const numberArray: number[] = getArray<number>([1, 2, 3]);
const stringArray: string[] = getArray<string>(["a", "b", "c"]);
五、联合类型 (Union Types)
联合类型表示变量可以是几种类型中的一种。
示例代码:
let id: number | string = 1;
id = "123";
六、类型守卫 (Type Guards)
类型守卫用于确保类型检查的准确性。
示例代码:
function isString(input: any): input is string {
return typeof input === "string";
}
const input: any = "Hello";
if (isString(input)) {
console.log(input.toUpperCase());
}
七、映射类型 (Mapped Types)
映射类型用于从现有类型生成一个新的类型。
示例代码:
type MappedType<T> = {
[P in keyof T]: T[P];
};
interface User {
name: string;
age: number;
}
type MappedUser = MappedType<User>;
掌握 TypeScript 类型系统,能让你在编写代码时更加高效和自信。以上只是 TypeScript 类型系统的一小部分内容,更多的实用技巧等待你去探索。希望本文能帮助你轻松入门 TypeScript 类型系统。
