TypeScript基本类型 #
一、类型系统概述 #
TypeScript支持JavaScript的所有原始类型,并添加了额外的类型检查能力。TypeScript的类型系统是结构化类型系统(structural type system),也称为"鸭子类型"(duck typing)。
二、字符串类型(string) #
2.1 基本用法 #
typescript
let name: string = 'TypeScript';
let greeting: string = "Hello, World!";
2.2 模板字符串 #
typescript
let name: string = 'TypeScript';
let version: number = 5.4;
let message: string = `Welcome to ${name} ${version}!`;
console.log(message);
2.3 多行字符串 #
typescript
let multiline: string = `
This is a
multiline string
in TypeScript
`;
2.4 字符串方法 #
typescript
let str: string = 'Hello, TypeScript!';
console.log(str.length);
console.log(str.toUpperCase());
console.log(str.toLowerCase());
console.log(str.substring(0, 5));
console.log(str.split(', '));
console.log(str.replace('TypeScript', 'World'));
console.log(str.includes('Type'));
console.log(str.startsWith('Hello'));
console.log(str.endsWith('!'));
三、数字类型(number) #
3.1 基本用法 #
TypeScript中的所有数字都是浮点数,类型为number。
typescript
let integer: number = 42;
let float: number = 3.14;
let negative: number = -10;
3.2 不同进制 #
typescript
let decimal: number = 42;
let hex: number = 0x2a;
let binary: number = 0b101010;
let octal: number = 0o52;
console.log(decimal === hex);
console.log(decimal === binary);
console.log(decimal === octal);
3.3 特殊数值 #
typescript
let infinity: number = Infinity;
let negInfinity: number = -Infinity;
let notANumber: number = NaN;
console.log(Number.POSITIVE_INFINITY);
console.log(Number.NEGATIVE_INFINITY);
console.log(Number.NaN);
3.4 数字方法 #
typescript
let num: number = 3.14159;
console.log(num.toFixed(2));
console.log(num.toPrecision(4));
console.log(Number.parseInt('42'));
console.log(Number.parseFloat('3.14'));
console.log(Number.isInteger(42));
console.log(Number.isNaN(NaN));
console.log(Number.isFinite(Infinity));
3.5 数学运算 #
typescript
console.log(Math.PI);
console.log(Math.abs(-42));
console.log(Math.ceil(3.14));
console.log(Math.floor(3.14));
console.log(Math.round(3.5));
console.log(Math.max(1, 2, 3));
console.log(Math.min(1, 2, 3));
console.log(Math.random());
console.log(Math.sqrt(16));
console.log(Math.pow(2, 3));
四、布尔类型(boolean) #
4.1 基本用法 #
typescript
let isDone: boolean = false;
let hasStarted: boolean = true;
4.2 布尔运算 #
typescript
let a: boolean = true;
let b: boolean = false;
console.log(a && b);
console.log(a || b);
console.log(!a);
4.3 比较运算 #
typescript
let x: number = 5;
let y: number = 10;
let isGreater: boolean = x > y;
let isEqual: boolean = x === y;
let isNotEqual: boolean = x !== y;
4.4 类型转换 #
typescript
let truthy: boolean = Boolean(1);
let falsy: boolean = Boolean(0);
let fromString: boolean = !!'hello';
let fromEmptyString: boolean = !!'';
五、null类型 #
5.1 基本用法 #
null表示"没有值"或"空值"。
typescript
let n: null = null;
5.2 严格空值检查 #
在严格模式下,null只能赋值给null、undefined或any类型。
typescript
let name: string = null;
let name: string | null = null;
5.3 null检查 #
typescript
function greet(name: string | null): string {
if (name === null) {
return 'Hello, Guest!';
}
return `Hello, ${name}!`;
}
console.log(greet(null));
console.log(greet('TypeScript'));
六、undefined类型 #
6.1 基本用法 #
undefined表示"未定义"或"缺少值"。
typescript
let u: undefined = undefined;
6.2 自动赋值 #
未初始化的变量自动为undefined。
typescript
let name: string;
console.log(name);
6.3 可选参数 #
可选参数自动包含undefined类型。
typescript
function greet(name?: string): string {
if (name === undefined) {
return 'Hello, Guest!';
}
return `Hello, ${name}!`;
}
6.4 可选属性 #
typescript
interface User {
name: string;
email?: string;
}
let user: User = { name: 'TypeScript' };
console.log(user.email);
七、symbol类型 #
7.1 基本用法 #
symbol是ES6引入的原始类型,表示唯一的标识符。
typescript
let sym1: symbol = Symbol('key');
let sym2: symbol = Symbol('key');
console.log(sym1 === sym2);
7.2 用作对象属性键 #
typescript
const key: symbol = Symbol('key');
interface Obj {
[key: symbol]: string;
}
let obj: Obj = {
[key]: 'value'
};
console.log(obj[key]);
7.3 全局Symbol注册表 #
typescript
let globalSym1: symbol = Symbol.for('app.key');
let globalSym2: symbol = Symbol.for('app.key');
console.log(globalSym1 === globalSym2);
console.log(Symbol.keyFor(globalSym1));
7.4 内置Symbol #
typescript
const iterable = {
[Symbol.iterator]() {
let step = 0;
return {
next() {
step++;
if (step <= 3) {
return { value: step, done: false };
}
return { value: undefined, done: true };
}
};
}
};
for (const value of iterable) {
console.log(value);
}
八、bigint类型 #
8.1 基本用法 #
bigint用于表示任意精度的整数,可以表示超过Number.MAX_SAFE_INTEGER的整数。
typescript
let big1: bigint = 9007199254740991n;
let big2: bigint = BigInt(9007199254740991);
let big3: bigint = BigInt('9007199254740991');
8.2 运算 #
typescript
let a: bigint = 100n;
let b: bigint = 200n;
console.log(a + b);
console.log(b - a);
console.log(a * b);
console.log(b / a);
console.log(b % a);
console.log(a ** 2n);
8.3 比较 #
typescript
let big: bigint = 100n;
let num: number = 100;
console.log(big === num);
console.log(big == num);
console.log(big > 50n);
8.4 类型转换 #
typescript
let big: bigint = 100n;
let num: number = Number(big);
let str: string = big.toString();
8.5 注意事项 #
typescript
let big: bigint = 100n;
let num: number = 50;
let result = big + num;
let result = big + BigInt(num);
九、类型兼容性 #
9.1 null和undefined的兼容性 #
在非严格模式下:
typescript
let name: string = null;
let age: number = undefined;
在严格模式下:
typescript
let name: string | null = null;
let age: number | undefined = undefined;
9.2 联合类型处理 #
typescript
function process(value: string | null | undefined): string {
if (value === null) {
return 'null';
}
if (value === undefined) {
return 'undefined';
}
return value;
}
9.3 可选链和空值合并 #
typescript
interface User {
name: string;
address?: {
city?: string;
};
}
let user: User = { name: 'TypeScript' };
let city: string | undefined = user.address?.city;
let cityOrDefault: string = user.address?.city ?? 'Unknown';
十、类型守卫 #
10.1 typeof检查 #
typescript
function process(value: string | number): void {
if (typeof value === 'string') {
console.log(value.toUpperCase());
} else {
console.log(value.toFixed(2));
}
}
10.2 null检查 #
typescript
function greet(name: string | null): string {
if (name === null) {
return 'Hello, Guest!';
}
return `Hello, ${name}!`;
}
10.3 真值检查 #
typescript
function printLength(str: string | null | undefined): void {
if (str) {
console.log(str.length);
} else {
console.log('Empty string');
}
}
十一、总结 #
本章介绍了TypeScript的基本类型:
| 类型 | 描述 | 示例 |
|---|---|---|
| string | 字符串 | 'hello', "world", `template` |
| number | 数字 | 42, 3.14, 0xff, 0b1010 |
| boolean | 布尔值 | true, false |
| null | 空值 | null |
| undefined | 未定义 | undefined |
| symbol | 唯一标识符 | Symbol('key') |
| bigint | 大整数 | 9007199254740991n |
关键要点:
- TypeScript完全支持JavaScript的所有原始类型
- 严格模式下需要显式处理
null和undefined symbol用于创建唯一标识符bigint用于处理大整数- 使用类型守卫进行类型收窄
最后更新:2026-03-26