TypeScript: TypeScript 基础类型

最后更新:2026-08-26

TypeScript 的类型系统从七种基础类型开始——掌握它们,就掌握了类型注解的"字母表"。

1. 七种基础类型

TypeScript 继承了 JavaScript 的七种基础类型,并为每种类型提供了类型注解语法:

类型 说明 示例值
string 字符串 "hello", 'world', `模板`
number 数字(整数和小数) 42, 3.14, 0xFF
boolean 布尔值 true, false
null 空值 null
undefined 未定义 undefined
symbol 唯一标识符 Symbol("id")
bigint 大整数 100n, BigInt(9007199254740991)

(1) string 字符串

字符串可以用单引号、双引号或反引号(模板字符串)表示:

TYPESCRIPT
let firstName: string = "Charlie";
let lastName: string = '王';
let greeting: string = `你好, ${firstName} ${lastName}`;

模板字符串(反引号)支持嵌入变量和表达式,这是 ES6 引入的语法,TypeScript 完全支持。

(2) number 数字

TypeScript 和 JavaScript 一样,不区分整数和小数——它们都是 number 类型:

TYPESCRIPT
let age: number = 25;         // 整数
let price: number = 9.99;     // 小数
let hex: number = 0xFF;       // 十六进制
let binary: number = 0b1010;  // 二进制
let octal: number = 0o744;    // 八进制
💡 提示: 如果你的计算涉及超过 Number.MAX_SAFE_INTEGER(2^53 - 1)的超大整数,应该用 bigint 而不是 number,否则会丢失精度。

(3) boolean 布尔值

只有两个值:truefalse。常用于条件判断和开关标志:

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

▶ 示例:基础类型注解

TYPESCRIPT
// 定义不同类型的变量
let title: string = "TypeScript 入门";
let version: number = 5.3;
let isPublished: boolean = true;

console.log("课程:" + title);
console.log("版本:" + version);
console.log("已发布:" + isPublished);
▶ 试一试

输出:

TEXT 📖 仅展示
课程:TypeScript 入门
版本:5.3
已发布:true

2. null 和 undefined

nullundefined 在 TypeScript 中既是值,也是类型。它们的区别看似微妙,但在类型系统中很重要。

(1) 含义区别

类型 含义 什么时候出现
undefined "还没有赋值" 变量声明但未初始化、函数没有返回值
null "有意为空" 开发者主动设置,表示"这里没值"

(2) 类型注解

TYPESCRIPT
let notAssigned: undefined = undefined;
let emptyValue: null = null;
⚠️ 注意: 默认情况下,nullundefined 可以赋值给任何类型的变量(比如 let name: string = null 是合法的)。但开启 strictNullChecks 后,它们只能赋值给 null/undefined 类型或联合类型。强烈建议开启严格空检查。

(3) strictNullChecks 的影响

TYPESCRIPT
// strictNullChecks: false(默认宽松模式)
let name: string = null;         // ✅ 不报错,但运行时 name.toUpperCase() 会崩溃

// strictNullChecks: true(严格模式,推荐)
let name2: string = null;        // ❌ 错误:不能将 null 赋值给 string
let name3: string | null = null; // ✅ 正确:显式声明可能为 null
📌 重点: strict: true 包含了 strictNullChecks: true。严格模式下,任何可能为 null/undefined 的值都必须显式声明,这能避免 90% 的"undefined is not a function"运行时错误。


3. symbol 类型

symbol 是 ES6 引入的原始类型,用于创建全局唯一标识符。每次调用 Symbol() 都会生成一个独一无二的值:

TYPESCRIPT
let id1: symbol = Symbol("id");
let id2: symbol = Symbol("id");

console.log(id1 === id2);  // false —— 即使描述相同,每个 symbol 都是唯一的

▶ 示例:symbol 作为对象的唯一键

TYPESCRIPT
let uniqueKey: symbol = Symbol("secret");

let user: object = {
  name: "Diana",
  age: 20
};

// 用 symbol 作为属性键,不会和其他属性冲突
user[uniqueKey] = "隐藏数据";

console.log(user.name);        // 正常访问
console.log(user[uniqueKey]);  // 访问 symbol 键的值
▶ 试一试

输出:

TEXT 📖 仅展示
Diana
隐藏数据
💡 提示: symbol 在日常开发中用得不多,主要出现在高级场景(如迭代器协议 Symbol.iterator、框架内部实现等)。初学者了解"每次 Symbol() 生成唯一值"就够了。


4. bigint 类型

bigint 是 ES2020 引入的类型,用于表示超过 number 安全范围的大整数。数字后面加 n 就是 bigint:

TYPESCRIPT
let big1: bigint = 100n;                        // 字面量写法
let big2: bigint = BigInt(9007199254740991);     // 函数写法

// number 的安全整数上限
let maxSafe: number = Number.MAX_SAFE_INTEGER;  // 9007199254740991
let overflow: number = 9007199254740992;        // 超出安全范围,精度丢失!

// bigint 不会丢失精度
let safe: bigint = 9007199254740992n;           // 精确表示
🔥 易错: bigintnumber 不能混合运算——100n + 50 会报错。必须先统一类型:Number(100n) + 50100n + BigInt(50)

▶ 示例:bigint 精度对比

TYPESCRIPT
// number 超出安全范围后精度丢失
let a: number = 9007199254740992;
let b: number = 9007199254740993;
console.log(a === b);  // true!两个不同的数居然相等

// bigint 精确表示
let c: bigint = 9007199254740992n;
let d: bigint = 9007199254740993n;
console.log(c === d);  // false —— 正确区分
▶ 试一试

输出:

TEXT 📖 仅展示
true
false

5. 类型注解的省略与最佳实践

(1) 什么时候必须写类型注解

场景 是否必须写 原因
变量无初始值 ✅ 必须 否则 TypeScript 无法推断类型
函数参数 ✅ 必须 参数没有初始值供推断
函数返回值 ⚠️ 建议写 TypeScript 能推断,但显式标注更清晰
变量有初始值 ❌ 可省略 TypeScript 根据初始值推断

(2) 最佳实践

TYPESCRIPT
// ✅ 推荐:变量有初始值时省略类型注解(类型推断足够)
let name = "Charlie";
let age = 20;

// ✅ 推荐:函数参数和返回值显式标注
function greet(name: string): string {
  return "你好, " + name;
}

// ✅ 推荐:无初始值时显式标注
let userId: number;
let isActive: boolean;

// ❌ 不推荐:有初始值还写注解(冗余)
let name2: string = "Charlie";  // 多余——TypeScript 已经推断出来了

❓ 常见问题

Q TypeScript 有没有 float 或 double 类型?
A 没有。和 JavaScript 一样,TypeScript 只有一个 number 类型,涵盖整数和小数。JavaScript 的数字都是 64 位双精度浮点数(IEEE 754),所以 1 和 1.0 在类型上是完全一样的。
Q null 和 undefined 有什么实际区别?什么时候用哪个?
A undefined 表示"还没赋值"(系统自动产生的状态),null 表示"有意为空"(开发者主动设置的值)。实际开发中,表示"没有值"时推荐用 null——因为 undefined 可能是忘记赋值导致的,null 则是明确的选择。
Q bigint 类型平时用得多吗?
A 不多。绝大多数场景 number 够用(安全整数范围到 2^53-1 ≈ 9000万亿)。bigint 主要用在加密算法、大数计算、数据库 bigint 字段等场景。初学者知道它存在就行,用到时再深入。
Q 类型注解写多了会不会影响性能?
A 完全不会。类型注解只在编译时存在,编译后的 JavaScript 代码中所有类型信息都被擦除了,运行时零开销。就像注释不会让程序变慢一样。

📖 小节

📝 作业

  1. 基础题(难度⭐):声明五个变量分别对应五种常用类型(string、number、boolean、null、undefined),赋上合适的值,用 console.log 逐个输出。
  2. 进阶题(难度⭐⭐):写一个函数 formatPrice(price: number, currency: string): string,把数字价格格式化为带货币符号的字符串,例如 formatPrice(99.5, "¥") 返回 "¥99.5"
  3. 挑战题(难度⭐⭐⭐):验证 number 的精度问题——写代码比较 0.1 + 0.20.3 是否相等,解释结果。然后用 bigint 计算两个超过 Number.MAX_SAFE_INTEGER 的大整数之和,验证 bigint 不丢精度。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏