TypeScript基本类型

100 阅读5分钟

一、前言

TypeScript 是 JavaScript 的一个超集,它通过添加静态类型系统帮助开发者写出更健壮、可维护性更强的代码。而理解 TypeScript 的基本类型 是学习 TypeScript 的第一步。

本文将带你全面了解 TypeScript 中的常用基本类型,包括:

  • ✅ 数值类型
  • ✅ 字符串类型
  • ✅ 布尔类型
  • ✅ null 与 undefined
  • ✅ any 与 unknown
  • ✅ never 与 void
  • ✅ 数组类型
  • ✅ 元组类型

并通过大量代码示例帮助你掌握其使用方式。

二、TypeScript 是什么?

✅ 定义:

TypeScript 是由微软开发的一种开源编程语言,它是 JavaScript 的超集,增加了 静态类型检查机制 和面向对象特性。

⚠️ 核心优势:

  • 编译时错误检测,减少运行时错误
  • 提供更好的代码提示与重构支持
  • 支持现代 JS 特性及未来提案

三、TypeScript 基本类型一览

类型示例描述
numberlet age: number = 25;所有数字类型(整数/浮点)
stringlet name: string = "Tom";字符串类型
booleanlet isDone: boolean = true;布尔类型
nulllet value: null = null;空值
undefinedlet x: undefined = undefined;未定义值
anylet data: any = "任意类型";不进行类型检查
unknownlet input: unknown;需要显式类型检查
neverfunction error(): never { throw new Error(); }永不返回的函数
voidfunction sayHello(): void { console.log("Hello"); }表示无返回值
arraylet list: number[] = [1, 2, 3];数组类型
tuplelet person: [string, number] = ["Tom", 25];固定长度、固定类型的数组

四、数值类型 number

TypeScript 中所有数字都属于 number 类型,包括整数、浮点数、十六进制、八进制、二进制等。

let age: number = 25;
let price: number = 9.99;
let hex: number = 0xf00d;
let binary: number = 0b1010;

五、字符串类型 string

字符串类型用于表示文本信息,可以用单引号或双引号定义。

let name: string = "Alice";
let message: string = `欢迎,${name}`;
console.log(message); // 输出:欢迎,Alice

六、布尔类型 boolean

布尔类型只有两个值:truefalse,常用于条件判断。

let isLogin: boolean = false;
if (isLogin) {
    console.log("用户已登录");
} else {
    console.log("请先登录");
}

七、null 与 undefined

这两个类型分别表示“空值”和“未定义”,它们是所有类型的子类型。

let user: string | null = null; // 可为 null 的字符串
let score: number | undefined = undefined; // 可为 undefined 的数值

// 使用场景:异步获取数据
function fetchData(): string | null {
    return null;
}

八、any 类型

any 类型表示允许该变量为任意类型,相当于关闭了类型检查。

⚠️ 虽然方便,但应谨慎使用!

let value: any = "字符串";
value = 123;
value = true;

value.someMethod(); // 不会报错,但可能运行时报错

九、 unknown 类型

unknownany 的安全替代方案。使用前必须进行类型检查。

let input: unknown;

input = "hello";
input = 123;

if (typeof input === "string") {
    console.log(input.toUpperCase());
} else if (typeof input === "number") {
    console.log(input.toFixed(2));
}

十、never 类型

never 表示永远不会发生值的类型,常见于抛出异常或无限循环的函数。

function throwError(message: string): never {
    throw new Error(message);
}

function infiniteLoop(): never {
    while (true) {}
}

十一、 void 类型

void 表示没有返回值的函数,或者变量不能赋任何值(除了 undefined)。

function sayHello(): void {
    console.log("Hello");
}

let result: void = undefined;

十二、数组类型

TypeScript 支持两种方式声明数组类型:

✅ 方式一:元素类型后加 []

let numbers: number[] = [1, 2, 3];

✅ 方式二:泛型语法 Array<元素类型>

let fruits: Array<string> = ["apple", "banana"];

十三、元组类型 tuple

元组表示一个已知数量和类型的数组,每个位置上的类型是固定的。

let person: [string, number] = ["Tom", 25];

// 错误写法:
person[1] = "25"; // 报错:不能将类型 'string' 分配给类型 'number'

十四、实际应用场景示例

✅ 示例1:用户登录状态管理

type User = {
    id: number;
    username: string;
    isLoggedIn: boolean;
    lastLogin?: Date; // 可选属性
};

const currentUser: User = {
    id: 1,
    username: "admin",
    isLoggedIn: true
};

✅ 示例2:处理 API 返回数据

function fetchUserData(): string | null {
    const response = Math.random() > 0.5 ? "{id: 1}" : null;
    return response;
}

const userData = fetchUserData();
if (userData !== null) {
    console.log(JSON.parse(userData));
}

十五、注意事项与最佳实践

场景建议
是否推荐使用 any❌ 不推荐,除非确实需要动态类型
如何替代 any✅ 推荐使用 unknown 或具体类型
null vs undefined✅ 明确区分使用场景
是否可以修改元组长度?❌ 不推荐,元组长度应固定
是否推荐类型推断?✅ 推荐使用类型推断提高代码简洁性

十六、总结对比表:TypeScript 基本类型一览

类型示例是否推荐使用说明
numberlet age: number = 25;✅ 是所有数字类型
stringlet name: string = "Tom";✅ 是字符串
booleanlet isOk: boolean = true;✅ 是布尔值
nulllet val: null = null;✅ 是空值
undefinedlet x: undefined = undefined;✅ 是未定义
anylet data: any = "任意类型";❌ 否应尽量避免
unknownlet input: unknown;✅ 是安全替代 any
neverfunction error(): never { throw new Error(); }✅ 是永不返回值
voidfunction log(): void {}✅ 是无返回值
arraylet list: number[] = [1, 2, 3];✅ 是数组
tuplelet person: [string, number] = ["Tom", 25];✅ 是固定类型和顺序

十七、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!