基础类型
基础类型(原始类型)是JavaScript中最基本的数据类型,其值具有不可变性(immutable),即一旦创建就无法被修改。
重新赋值是修改变量的指向,没有修改值本身。
ES6+ 中共有 7 种基础类型(原始类型):
string(字符串)
TypeScript
let str: string = 'hello';
// 模板字符串
let str2: string = `${str} world`;
// 多行文本
let str3: string = `
<div>
<p>${str2}</p>
</div>
`;1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
number(数字)
TypeScript的number类型涵盖所有数值,包括整数、浮点数、二进制、八进制和十六进制:
TypeScript
const num: number = 10; // 整数
const floatNum: number = 3.14; // 浮点数
const binaryNum: number = 0b1010; // 二进制表示
const octalNum: number = 0o123; // 八进制表示
const hexNum: number = 0x1A; // 十六进制表示1
2
3
4
5
2
3
4
5
boolean(布尔)
TypeScript
const bool: boolean = true;
// TypeScript不允许隐式类型转换
// let bool: boolean = 1; // ❌ Type 'number' is not assignable to type 'boolean'
// let bool: boolean = !!1; // ✅ 显式转换1
2
3
4
5
2
3
4
5
symbol(符号)
Symbol 是 ES6 新增的原始类型,每个 Symbol() 会创建绝对唯一、永不重复的值。
Symbol 专门用来解决对象属性名冲突问题。避免不同模块、库的属性名互相覆盖。
TypeScript
// 创建一个唯一 symbol
let id1: symbol = Symbol();
const obj: { [id1]: number } = {
[id1]: 100
};
// 可以加描述(仅用于调试,不影响唯一性)
let id2: symbol = Symbol("id");
let id3: symbol = Symbol("id");
// 描述相同,但两个 Symbol 不相等!
id2 !== id3; // true
// 如果需要跨文件 / 跨模块复用同一个 Symbol,用 Symbol.for()
let id4: symbol = Symbol.for("id");
let id5: symbol = Symbol.for("id");
id4 === id5; // true1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bigint(大整数)
BigInt 用于表示大于Number.MAX_SAFE_INTEGER(2^53-1)的整数。
TypeScript
const bigintVal: bigint = 100n;
const fromString: bigint = BigInt("100n");
const fromNumber: bigint = BigInt(100n);1
2
3
4
2
3
4
Undefined 和 Null
这两个类型在TypeScript中既独立又特殊,它们是所有类型的子类型(除非开启strictNullChecks):
undefined(未定义)
变量声明了但没给值、函数没有返回值、对象不存在的属性。(系统自动给)
null(空值)
空对象,主动赋值的 “无”,表示 “这里应该有个对象,但现在为空”。
TypeScript
// 基础声明
let nullVal: null = null;
let undefinedVal: undefined = undefined;1
2
3
2
3
非严格模式(strictNullChecks: false)
null 和 undefined 是所有类型的子类型
你可以把它们赋值给任何变量:
TypeScript
let num: number = null; // 不报错
let str: string = undefined; // 不报错
let obj: object = null; // 不报错1
2
3
2
3
严格模式(strictNullChecks: true)
完全独立,必须用 null / undefined 声明。
TypeScript
let num: number = null; // ❌ Type 'null' is not assignable to type 'number'
let str: string = undefined; // ❌ Type 'undefined' is not assignable to type 'string'
let obj: object = null; // ❌ Type 'null' is not assignable to type 'object'1
2
3
2
3
正确写法:联合类型
TypeScript
let maybeNumber: number | undefined = undefined;
let maybeString: string | null = null;1
2
2

