TypeScript 基础
什么是 TypeScript?
TypeScript 是 JavaScript 的超集,添加了静态类型检查。它由 Microsoft 开发,是 JavaScript 生态系统中的主流语言。
- 🎯 提供类型安全,减少运行时错误
- 💡 智能提示和自动补全
- 🛠️ 更好的重构体验
- 📖 更清晰的代码文档
- ✅ 编译时发现错误
基本类型
// 基本类型
const name: string = "张三";
const age: number = 25;
const isActive: boolean = true;
const data: null = null;
const nothing: undefined = undefined;
// 数组类型
const numbers: number[] = [1, 2, 3];
const names: Array = ["张三", "李四"];
// 对象类型
interface Person {
name: string;
age: number;
city?: string; // 可选属性
}
const person: Person = {
name: "张三",
age: 25,
city: "北京"
};
函数类型
// 函数声明
function greet(name: string): string {
return `你好,${name}`;
}
// 箭头函数
const add = (a: number, b: number): number => a + b;
// 可选参数
const greetUser = (name: string, greeting?: string) => {
const message = greeting || "你好";
return `${message},${name}`;
};
// 默认参数
const createUser = (name: string, age: number = 18) => ({
name,
age
});
// 剩余参数
const sum = (...numbers: number[]): number =>
numbers.reduce((a, b) => a + b, 0);
高级类型
// 联合类型
type ID = string | number;
const userId: ID = 123;
const orderId: ID = "order-123";
// 字面量类型
type Theme = "light" | "dark" | "auto";
const currentTheme: Theme = "dark";
// 数组元组
type Coordinate = [number, number];
const point: Coordinate = [10, 20];
// 枚举
enum Status {
Pending = "pending",
Success = "success",
Failed = "failed"
}
// 类型断言
const value: unknown = "hello";
const length: number = (value as string).length;
泛型
// 泛型函数
function identity(value: T): T {
return value;
}
const num = identity(42);
const str = identity("hello");
// 泛型接口
interface Box {
value: T;
}
const box1: Box = { value: 123 };
const box2: Box = { value: "hello" };
// 泛型约束
interface HasLength {
length: number;
}
function getLength(value: T): number {
return value.length;
}
类型推断
// TypeScript 可以自动推断类型
const name = "张三"; // 自动推断为 string
const age = 25; // 自动推断为 number
// 函数返回类型推断
const add = (a: number, b: number) => a + b; // 自动推断返回 number
// 对象类型推断
const user = {
name: "张三",
age: 25
}; // 自动推断为 {name: string, age: number}
实用类型工具
// Partial - 所有属性变为可选
interface User {
name: string;
age: number;
}
type PartialUser = Partial;
// { name?: string; age?: number }
// Required - 所有属性变为必需
type RequiredUser = Required;
// { name: string; age: number }
// Pick - 选择部分属性
type UserName = Pick;
// { name: string }
// Omit - 排除部分属性
type UserWithoutAge = Omit;
// { name: string }
// Record - 创建对象类型
type UserRecord = Record;
// Exclude - 排除联合类型
type ExcludeString = Exclude;
// number
在浏览器中使用 TypeScript
虽然有 JSDoc 等替代方案,但 TypeScript 编译器(tsc)仍然是最完整的类型检查工具。
// 使用 JSDoc 提供类型提示 (推荐用于小型项目)
/**
* @param {string} name - 用户名
* @param {number} age - 年龄
* @returns {Object} 用户对象
*/
function createUser(name, age) {
return { name, age };
}
// 使用 TypeScript 配置
// tsconfig.json
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"strict": true,
"moduleResolution": "node"
}
}
TypeScript vs JavaScript
什么时候使用 TypeScript?
- ✅ 大型项目或团队协作
- ✅ 需要长期维护的项目
- ✅ 复杂的业务逻辑
- ✅ 需要更好的开发体验
- ❓ 小型脚本或快速原型
- ❓ 学习阶段的项目