TypeScript总结:15、类型速查

TypeScript 类型速查

本文用于快速查阅 TypeScript 常见类型和类型工具。遇到新的变量、参数或接口数据时,可以先判断它属于哪一类,再选择对应写法。

一、类型声明和类型推断

类型声明

ts 复制代码
let name: string = '孙悟空';
let age: number = 18;

function add(a: number, b: number): number {
  return a + b;
}

类型推断

ts 复制代码
const message = 'hello'; // string
const count = 10;        // number
const enabled = true;    // boolean

建议:

  • 初始值明确、类型简单时,可以使用类型推断。
  • 函数参数、公共函数返回值和业务边界建议显式声明。
  • 不要为了省代码把所有内容都写成 any

二、基础类型速查

类型 示例 适用场景
number 18 普通数字
bigint 100n 大整数
string 'hello' 文本
boolean true 是或否
any 任意值 临时兼容旧代码
unknown 任意值 未知但需要安全检查的值
void 无返回值 没有返回结果的函数
never 永不正常结束 抛异常或无限循环
object {} 非原始对象,但结构不明确
null null 明确表示空值
undefined undefined 明确表示未定义

三、any、unknown、void 和 never

any

ts 复制代码
let value: any = 10;
value = 'hello';
value.notExist();

any 会关闭大量类型检查,只适合临时迁移或无法立即改造的旧代码。

unknown

ts 复制代码
function print(value: unknown): void {
  if (typeof value === 'string') {
    console.log(value.toUpperCase());
  }
}

未知数据优先使用 unknown,使用前先做类型收窄。

void 和 never

ts 复制代码
function log(message: string): void {
  console.log(message);
}

function fail(message: string): never {
  throw new Error(message);
}
类型 含义
void 函数正常执行结束,但没有有意义的返回值
never 函数不会正常结束

四、数组、元组和枚举

数组

ts 复制代码
const numbers: number[] = [1, 2, 3];
const names: Array<string> = ['Tom', 'Jerry'];

元组

ts 复制代码
const user: [string, number] = ['孙悟空', 18];

元组用于固定长度和固定顺序的数据。

枚举

ts 复制代码
enum Status {
  Todo = 'todo',
  Doing = 'doing',
  Done = 'done'
}

const status: Status = Status.Todo;
需求 类型
多个同类型元素 数组
固定长度和顺序 元组
一组有名字的常量 枚举

五、字面量、联合类型和类型别名

字面量类型

ts 复制代码
let color: 'red' | 'blue';
color = 'red';

联合类型

ts 复制代码
let id: number | string;
id = 1001;
id = 'user-1001';

类型别名

ts 复制代码
type OrderStatus = 'pending' | 'success' | 'failed';
type ID = number | string;

使用类型别名可以复用复杂的联合类型和对象结构。

六、类型断言和类型收窄

类型断言

ts 复制代码
const value: unknown = 'hello';
const length = (value as string).length;

类型断言只告诉编译器如何理解值,不会在运行时转换数据。

类型收窄

ts 复制代码
function format(value: unknown): string {
  if (typeof value === 'string') {
    return value.toUpperCase();
  }

  if (typeof value === 'number') {
    return value.toFixed(2);
  }

  return '';
}

来自用户输入、网络请求或文件的数据,优先使用运行时判断,而不是盲目断言。

七、接口、类和泛型

接口

ts 复制代码
interface User {
  id: number;
  name: string;
}

接口适合描述对象结构和类需要遵守的契约。

ts 复制代码
class Person {
  constructor(public name: string) {}
}

类适合创建对象模型,并封装数据和行为。

泛型

ts 复制代码
function identity<T>(value: T): T {
  return value;
}

泛型适合在保持类型关系的同时复用函数、类和接口。

八、类型选择决策表

问题 推荐选择
这是数字、文本或布尔值吗? numberstringboolean
类型暂时未知,但需要安全使用吗? unknown
函数没有返回结果吗? void
函数永远不会正常结束吗? never
需要限制为几个固定值吗? 字面量联合类型
需要保存同类型列表吗? 数组
需要固定长度和顺序吗? 元组
需要描述对象结构吗? 接口或对象类型
需要创建有属性和行为的对象吗?
需要复用但类型不固定的逻辑吗? 泛型

九、常用代码模板

函数模板

ts 复制代码
function fn(parameter: Type): ReturnType {
  // ...
}

接口模板

ts 复制代码
interface Entity {
  id: number;
  name: string;
}

泛型模板

ts 复制代码
function fn<T>(value: T): T {
  return value;
}

十、本章小结

  • 先判断数据的实际含义,再选择类型。
  • 不确定的数据优先使用 unknown,避免滥用 any
  • 对固定取值使用字面量联合类型。
  • 对象结构使用接口,复用类型关系使用泛型。
  • 类型断言不是数据转换,外部数据需要运行时校验。
相关推荐
xqchen6 小时前
Web Components 普及困境深度解析:技术标准与工程实践的落差
javascript
爱丶不疚6 小时前
写给前端工程师的现代 Python 工程化最佳实践:从 pnpm 到 uv,从 CommonJS 到 src-layout
javascript·python·typescript
前端大卫6 小时前
H5 渲染 PDF 并添加高亮的两种方案【附源码】
前端
因_崔斯汀7 小时前
用 AI 生成 Three.js 沉浸式网站,代码与 Skill 均已开源
前端·人工智能
葡萄城技术团队8 小时前
一键触发工作表中所有异步函数:用依赖单元格刷新 SpreadJS 公式
前端
Bigger8 小时前
谁动了我的 URL?——记一次微前端"灵异 Bug"的排查实录
前端·ai编程·vue-router
JavaGuide8 小时前
轻量开源版 IDEA 来了!
前端·后端
2601_962097488 小时前
JavaScript 异步编程
javascript·ajax·回调函数·异步编程·子线程
张洪权8 小时前
nest.js websocket 群聊----私聊功能
前端·nestjs
流光D8 小时前
AI Era: Building Web Sites and Configuring Nginx Reverse Proxy Process
前端·人工智能·nginx