基础类型:构建数据的基石
第 1 节 概述
上一篇我们搭建了 TypeScript 环境,写下了 name: string 这样的类型注解。
string 就是一个基础类型。基础类型就像搭积木的最小单元——它们是构建复杂类型的基本材料。
TypeScript 的基础类型与 JavaScript 的原始类型一一对应:
| TypeScript 类型 | JavaScript 原始类型 | 示例 |
|---|---|---|
string | String | "你好", 'hello' |
number | Number | 42, 3.14, NaN |
boolean | Boolean | true, false |
bigint | BigInt | 100n |
symbol | Symbol | Symbol("id") |
null | Null | null |
undefined | Undefined | undefined |
第 2 节 string / number / boolean
这是最常见的三个类型:
| |
number 包含整数、浮点数、NaN、Infinity,JavaScript 的所有数值都是 number 类型:
| |
第 3 节 bigint 与 symbol
bigint 表示任意精度的整数,适合处理超大数值:
| |
symbol 表示唯一标识符,常用于对象属性的键:
| |
第 4 节 null 与 undefined
null 和 undefined 在 TypeScript 中有各自的类型:
| |
在开启 strict: true 的情况下,它们只能赋值给自己,不能赋值给其他类型:
| |
非严格模式下,null 和 undefined 可以赋值给任何类型。但项目应始终开启 strict: true——这是 TypeScript 最大的价值所在。
第 5 节 类型推断
你不需要每次都写明类型。TypeScript 会根据值自动推断:
| |
用 const 声明的字面量,TypeScript 会推断为最精确的类型:
| |
第 6 节 字面量类型
当变量的值被限定为某一个具体值时,值本身就可以作为类型:
| |
第 7 节 any 与 unknown
any 是类型系统的"逃生舱"。声明为 any 的变量,TypeScript 会关闭它的类型检查:
| |
any 让你回到了 JavaScript 的世界——自由,但危险。
unknown 是类型安全的 any。它表示"我不知道这是什么类型",但使用前必须验证:
| |
| 对比 | any | unknown |
|---|---|---|
| 赋值给别人 | 可以赋值给任何类型 | 只能赋值给 any 和 unknown |
| 调用方法 | 可以调用任何方法 | 必须先进行类型检查 |
| 安全性 | 无 | 有 |
当你不确定一个值的类型时,优先用 unknown,而不是 any。它强迫你在使用前做类型验证,避免运行时错误。
基础类型是类型系统的起点。你现在能描述一个值"是什么"了。
除了这些,还有 void(函数无返回值)和 never(永不发生)两个特殊类型,它们更多出现在函数和类型守卫的上下文中,后面用到时再细说。
但现实世界的数据很少是孤立的——一个值往往属于一个集合:数组、元组、对象…… 下一组类型就是处理这些"复合"情况的。