基础类型:boolean、number、string
本教程共 80 篇 · 第 9 篇 · 更新于 2026-08-10 · 约 10 分钟阅读
本节目标:掌握 TypeScript 的三大基元类型,理解 number 为什么没有 int/float 之分,学会模板字符串的类型写法,以及牢记小写类型和大写包装对象的区别。
三种基元类型
JavaScript 有三类最基本的原始值:字符串、数字、布尔。TypeScript 给它们分别配了对应的类型:string、number、boolean。命名完全一致,你甚至可以用 JavaScript 的 typeof 操作符来验证它们的关系。
let isDone: boolean = false; // 布尔
let total: number = 100; // 数字
let greeting: string = "Hello"; // 字符串
三种类型各司其职,不能互相赋值。TypeScript 会在编译阶段就拦住错误:
let count: number = 10;
// count = "十个"; // ❌ 类型 "string" 不能赋给类型 "number"
let name: string = "小明";
// name = true; // ❌ 类型 "boolean" 不能赋给类型 "string"
这个检查在你重构代码时特别有用——如果你改了一个变量的初始化值,所有不兼容的赋值都会被立刻揪出来。
boolean:不止是 true 和 false
布尔类型只有两个值:true 和 false。通常用在条件判断、开关状态、标志位上。
let isLoading: boolean = false;
let hasPermission: boolean = true;
// 条件判断中的布尔
if (hasPermission) {
console.log("有权限,可以操作");
}
// 比较运算的结果也是布尔
let isAdult: boolean = 18 >= 18; // true
有一点需要注意:TypeScript 不会自动把”真值”(truthy)和”假值”(falsy)推断为 boolean。换言之,0、""、null 这些 JavaScript 里的假值,在 TS 中不等于 false。
let flag: boolean = true;
// flag = 1; // ❌ 数字 1 不是 boolean
// flag = ""; // ❌ 空字符串也不是 boolean
// 需要显式转换
flag = Boolean(1); // ✅
flag = !!"hello"; // ✅
number:整数浮点一家亲
TypeScript 的 number 跟 JavaScript 一样,不区分整数和浮点数。没有 int、float、double 这些子类型。无论 42 还是 3.14,类型都是 number。
let integer: number = 42;
let float: number = 3.14;
let negative: number = -7;
所有 JavaScript 支持的数字字面量写法,TypeScript 都能识别:
let decimal: number = 42; // 十进制
let hex: number = 0xff; // 十六进制(255)
let binary: number = 0b1010; // 二进制(10)
let octal: number = 0o744; // 八进制(484)
let big: number = 1_000_000; // 数字分隔符,提高可读性
Tip如果你的数字特别大(超过 2⁵³-1),需要用
bigint类型,后面章节会单独讲。日常开发中number足够覆盖绝大多数场景。
数字运算也有类型保护——把 number 作为参数传给期望 string 的地方会立马报错:
function repeat(str: string, times: number) { }
// repeat("Hello", "3"); // ❌ "3" 不是 number
repeat("Hello", 3); // ✅
string:三种引号,一种类型
TypeScript 的 string 对应 JavaScript 字符串。支持单引号、双引号、反引号(模板字符串)三种写法,类型统一是 string。
let single: string = '单引号';
let double: string = "双引号";
let template: string = `反引号`; // 模板字符串
模板字符串是 ES2015 引入的,可以在字符串里嵌入表达式:
let name: string = "小明";
let age: number = 18;
// ${} 可以嵌任何表达式
let intro: string = `我叫 ${name},今年 ${age} 岁`;
console.log(intro); // "我叫 小明,今年 18 岁"
// 表达式不限于变量名
let nextYear: string = `明年 ${age + 1} 岁`;
console.log(nextYear); // "明年 19 岁"
// 多行文本也很自然
let poem: string = `
静夜思
床前明月光,
疑是地上霜。`;
模板字符串的类型也是 string,跟普通字符串在类型层面完全一样。
🔴 陷阱:小写 string vs 大写 String
这是一个几乎所有 TS 新人都会踩的坑。TypeScript 里有两种写法:小写的 string 和大写的 String。它们是完全不同的东西。
let good: string = "hello"; // ✅ 这是基元类型(primitive)
let bad: String = "hello"; // ⚠️ 这是包装对象类型(wrapper object)
小写 string 是 TypeScript 的基元类型,表示原始字符串值。大写 String 是 JavaScript 的 String 构造函数类型,表示字符串包装对象。两者不兼容:
let primitive: string = "hello";
let wrapper: String = new String("hello");
// primitive = wrapper; // ❌ String 不能赋给 string
// wrapper = primitive; // ❌ string 也不能赋给 String(strict 模式下)
number 和 Number、boolean 和 Boolean 同理。
Note在 JavaScript 中,当你调用
"hello".toUpperCase()时,JS 引擎会临时把基元值”装箱”成包装对象,执行方法后再扔掉。TypeScript 的基元类型已经完整支持这些方法,所以你永远不需要用大写版本。
规则很简单:永远用小写。 你不会在正规的 TypeScript 代码里看到 String、Number、Boolean 作为类型注解。
类型错误能帮你发现什么
刚接触 TypeScript 时,类型错误看起来像”编译器在找茬”。换个角度看,这些错误其实是在帮你预防真实 bug。举几个例子:
// ❌ 把字符串当数字做算术
let price: number = 100;
// price = "一百"; // 编译错误:类型不匹配
// ❌ 调用不存在的方法
let username: string = "admin";
// username.trimStartt(); // 编译错误:拼写错误被及时发现
// ❌ 条件判断写了赋值
let isActive: boolean = false;
// if (isActive = true) { } // 编译错误:赋值返回 true,不是 boolean
JavaScript 里这些错误要到运行时才知道——有时候甚至静默失败,很难排查。TypeScript 把这些都提前到了编码阶段。
可运行示例
下面的代码把三种基础类型串在一起,你可以直接在 TypeScript 环境里跑:
// 三种基础类型的综合示例
// boolean:用户登录状态
let isLoggedIn: boolean = true;
// number:订单金额
let orderAmount: number = 299.5;
let itemCount: number = 3;
let unitPrice: number = orderAmount / itemCount;
// string:订单摘要
let customerName: string = "小明";
let summary: string = `${customerName} 的订单包含 ${itemCount} 件商品,
合计 ¥${orderAmount},单价约 ¥${unitPrice.toFixed(2)}`;
if (isLoggedIn) {
console.log("✅ 已登录");
} else {
console.log("❌ 未登录,请先登录");
}
console.log(summary);
输出:
✅ 已登录
小明 的订单包含 3 件商品,
合计 ¥299.5,单价约 ¥99.83
小结
boolean、number、string 是日常 TypeScript 代码里出现频率最高的类型。它们用法简单,但有几个细节值得记住:number 不区分整数和浮点、模板字符串能嵌表达式不用拼接、大写 String 是包装对象不能当类型用。下一章我们看数组——当一堆同类型数据凑在一起时,TypeScript 如何帮你管好它们。