Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
# 第2章:基础类型与变量

## any、unknown、never 类型

### 1. `any` 类型
`any` 是 TypeScript 中最灵活的类型,它允许变量绕过静态类型检查。  
**特点**:
- 可以赋值给任意类型,也可以接收任意类型的值。
- 相当于关闭了类型检查,应谨慎使用(可能失去 TypeScript 的优势)。

**示例**:
```typescript
let data: any = "Hello";
data = 42;       // 合法
data = [1, 2];   // 合法

使用场景:

  • 迁移旧 JavaScript 代码时临时使用。
  • 处理动态内容(如第三方库或用户输入)。

2. unknown 类型

unknown 是 TypeScript 3.0 引入的类型,比 any 更安全。
特点:

  • 可以接收任意类型的值,但不能直接操作(需先进行类型检查或断言)。
  • 强制开发者显式处理类型问题。

示例:

let userInput: unknown = fetchUserInput(); // 假设返回类型不确定

// 错误:直接操作会报错
// console.log(userInput.toUpperCase());

// 需先进行类型检查
if (typeof userInput === "string") {
  console.log(userInput.toUpperCase()); // 合法
}

与 any 的区别:

  • unknown 是“类型安全”的顶层类型,而 any 不是。

3. never 类型

never 表示永远不会发生的值,通常用于函数返回值或不可能的分支。
特点:

  • 函数抛出异常或无限循环时返回 never。
  • 联合类型中 never 会被自动忽略。

示例:

// 抛出错误的函数
function throwError(message: string): never {
  throw new Error(message);
}

// 不可能的类型分支
type Result = string | number;
function checkType(value: Result) {
  if (typeof value === "string") {
    // 处理字符串
  } else if (typeof value === "number") {
    // 处理数字
  } else {
    // 此处 value 的类型是 never
    console.log(value); // 编译时会报错
  }
}

使用场景:

  • 强制处理所有可能的类型分支(如联合类型检查)。
  • 标记不可能返回的函数。

对比总结

类型描述安全性
any任意类型,跳过类型检查❌ 不安全
unknown任意类型,需显式类型检查✅ 安全
never表示不可能存在的值✅ 类型系统优化

### 补充说明
- **最佳实践**:优先使用 `unknown` 替代 `any` 以提高类型安全性。
- **类型断言**:对 `unknown` 类型可通过 `as` 或类型保护缩小范围。
Last Updated:: 3/27/25, 10:50 AM