TypeScript 基础类型全面解析
前言
TypeScript 作为 JavaScript 的超集,提供了强大的类型系统,使得我们能够更好地构建和维护大型应用。本文将深入讲解 TypeScript 的基础类型系统,帮助开发者全面掌握类型定义的核心概念。
布尔类型 (Boolean)
布尔类型是最基础的数据类型,表示逻辑值 true 或 false。
let isActive: boolean = true;
let hasPermission: boolean = false;
在实际开发中,布尔类型常用于条件判断、开关控制等场景。TypeScript 会确保赋值的类型一致性,避免意外的类型转换。
数字类型 (Number)
TypeScript 中的数字类型包括:
- 常规数字(浮点数)
- 大整数(BigInt)
- 支持多种进制表示法
// 十进制
let decimal: number = 42;
// 十六进制
let hex: number = 0x2a;
// 二进制
let binary: number = 0b101010;
// 八进制
let octal: number = 0o52;
// 大整数
let big: bigint = 9007199254740991n;
特别需要注意的是,BigInt 是 ES2020 引入的新特性,用于表示大于 2^53 - 1 的整数,使用时需要在数字后加 n 后缀。
字符串类型 (String)
字符串类型用于表示文本数据,支持三种定义方式:
// 单引号
let name: string = 'Alice';
// 双引号
let greeting: string = "Hello";
// 模板字符串
let message: string = `Hello, ${name}!`;
模板字符串是 ES6 引入的特性,特别适合多行字符串和字符串插值场景。TypeScript 完全支持这一特性,并会进行类型检查。
数组类型 (Array)
TypeScript 提供了两种定义数组类型的方式:
// 方式一:元素类型后接[]
let numbers: number[] = [1, 2, 3];
// 方式二:使用泛型语法
let strings: Array<string> = ['a', 'b', 'c'];
在实际项目中,第一种语法更为常见,可读性更好。数组类型会确保所有元素类型一致,避免混合类型导致的运行时错误。
元组类型 (Tuple)
元组类型允许表示一个已知元素数量和类型的数组,各元素类型不必相同:
let person: [string, number] = ['Alice', 30];
// 正确访问
console.log(person[0].toUpperCase()); // "ALICE"
console.log(person[1].toFixed(2)); // "30.00"
// 错误访问
person[1].toUpperCase(); // 类型错误
元组在需要固定结构但又不想定义完整对象时非常有用,比如处理 CSV 数据或函数返回多个值。
枚举类型 (Enum)
枚举是 TypeScript 对 JavaScript 的扩展,用于定义命名常量集合:
enum Direction {
Up = 1,
Down,
Left,
Right
}
let move: Direction = Direction.Up;
枚举提供了以下优势:
- 提高代码可读性
- 集中管理相关常量
- 提供类型安全保证
枚举支持数字和字符串值,也支持反向映射(通过值获取名称)。
特殊类型
Unknown 类型
unknown
类型是 TypeScript 3.0 引入的类型安全的 any
替代品:
let uncertain: unknown = "maybe a string";
// 需要类型检查后才能操作
if (typeof uncertain === "string") {
console.log(uncertain.toUpperCase());
}
Any 类型
any
类型会绕过类型检查,应谨慎使用:
let flexible: any = 4;
flexible = "now a string"; // 不会报错
Void 类型
void
表示没有返回值:
function logMessage(): void {
console.log("This is a message");
}
Never 类型
never
表示永远不会发生的值:
function throwError(message: string): never {
throw new Error(message);
}
Object 类型
object
表示非原始类型:
function create(o: object | null): void {}
create({ prop: 0 }); // 正确
create(42); // 错误
类型断言
类型断言告诉编译器"我知道这个值的具体类型":
// 尖括号语法
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
// as 语法
let anotherValue: any = "another string";
let anotherLength: number = (anotherValue as string).length;
在 JSX 中只能使用 as
语法。
最佳实践
- 优先使用
let
和const
代替var
- 避免使用
Number
,String
,Boolean
等包装类型 - 尽量少用
any
,优先考虑unknown
- 开启严格模式(包括
strictNullChecks
)
总结
TypeScript 的基础类型系统为 JavaScript 带来了强大的类型安全保障。通过合理使用这些类型,开发者可以大幅减少运行时错误,提高代码的可维护性。建议在实际项目中结合 TypeScript 的配置选项,充分发挥类型系统的优势。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考