TypeScript 基础类型全面解析

TypeScript 基础类型全面解析

TypeScript TypeScript 使用手册(中文版)翻译。http://www.typescriptlang.org TypeScript 项目地址: https://gitcode.com/gh_mirrors/typ/TypeScript

前言

TypeScript 作为 JavaScript 的超集,提供了强大的类型系统,使得我们能够更好地构建和维护大型应用。本文将深入讲解 TypeScript 的基础类型系统,帮助开发者全面掌握类型定义的核心概念。

布尔类型 (Boolean)

布尔类型是最基础的数据类型,表示逻辑值 true 或 false。

let isActive: boolean = true;
let hasPermission: boolean = false;

在实际开发中,布尔类型常用于条件判断、开关控制等场景。TypeScript 会确保赋值的类型一致性,避免意外的类型转换。

数字类型 (Number)

TypeScript 中的数字类型包括:

  1. 常规数字(浮点数)
  2. 大整数(BigInt)
  3. 支持多种进制表示法
// 十进制
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;

枚举提供了以下优势:

  1. 提高代码可读性
  2. 集中管理相关常量
  3. 提供类型安全保证

枚举支持数字和字符串值,也支持反向映射(通过值获取名称)。

特殊类型

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 语法。

最佳实践

  1. 优先使用 letconst 代替 var
  2. 避免使用 Number, String, Boolean 等包装类型
  3. 尽量少用 any,优先考虑 unknown
  4. 开启严格模式(包括 strictNullChecks

总结

TypeScript 的基础类型系统为 JavaScript 带来了强大的类型安全保障。通过合理使用这些类型,开发者可以大幅减少运行时错误,提高代码的可维护性。建议在实际项目中结合 TypeScript 的配置选项,充分发挥类型系统的优势。

TypeScript TypeScript 使用手册(中文版)翻译。http://www.typescriptlang.org TypeScript 项目地址: https://gitcode.com/gh_mirrors/typ/TypeScript

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计金勇Louise

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值