首页 / TypeScript 入门教程 / 基础类型:boolean、number、string

TypeScript 入门教程

基础类型:boolean、number、string

本教程共 80 篇 · 第 9 篇 · 更新于 2026-08-10 · 约 10 分钟阅读

TypeScriptTypeScript 入门教程基础类型booleannumberstring

本节目标:掌握 TypeScript 的三大基元类型,理解 number 为什么没有 int/float 之分,学会模板字符串的类型写法,以及牢记小写类型和大写包装对象的区别。

三种基元类型

JavaScript 有三类最基本的原始值:字符串、数字、布尔。TypeScript 给它们分别配了对应的类型:stringnumberboolean。命名完全一致,你甚至可以用 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

布尔类型只有两个值:truefalse。通常用在条件判断、开关状态、标志位上。

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 一样,不区分整数和浮点数。没有 intfloatdouble 这些子类型。无论 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 模式下)

numberNumberbooleanBoolean 同理。

Note

在 JavaScript 中,当你调用 "hello".toUpperCase() 时,JS 引擎会临时把基元值”装箱”成包装对象,执行方法后再扔掉。TypeScript 的基元类型已经完整支持这些方法,所以你永远不需要用大写版本。

规则很简单:永远用小写。 你不会在正规的 TypeScript 代码里看到 StringNumberBoolean 作为类型注解。

类型错误能帮你发现什么

刚接触 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

小结

booleannumberstring 是日常 TypeScript 代码里出现频率最高的类型。它们用法简单,但有几个细节值得记住:number 不区分整数和浮点、模板字符串能嵌表达式不用拼接、大写 String 是包装对象不能当类型用。下一章我们看数组——当一堆同类型数据凑在一起时,TypeScript 如何帮你管好它们。