覆盖 TypeScript 基础类型、接口与 type 的区别、泛型、联合类型、类型守卫和常用工具类型,示例可直接粘贴到项目中,适合从 JavaScript 迁移时查阅。

基础类型

在 JavaScript 类型上加静态标注,数组、元组、字面量都能描述。未知类型比任意类型安全,取值前必须先收窄;打开严格模式后编译器还能查出大量空值隐患,迁移旧代码时尤其明显。

let count: number = 0;

接口与 type

接口描述对象形状且允许声明合并,适合对外契约;类型别名更灵活,可表达联合、交叉与映射。可选属性用问号标注,只读属性加只读修饰,同一处别混着写两种。

interface User { id: number }

泛型

把类型当参数传入,保留输入输出之间的对应关系,避免到处写任意类型;限定范围用继承约束,调用时通常能自动推断,不必手写尖括号。

type Box = { value: T };

联合类型与字面量

用竖线收窄取值范围,配合字符串字面量做状态机,拼错单词在编译期就报错。配合可辨识联合,还能让编译器在分支里自动收窄到具体成员。

type Status = "idle" | "done";

类型守卫

类型判断、属性判断和自定义谓词让编译器在分支里收窄类型,不必再手动强转。谓词函数返回布尔即可,返回值签名里要写明目标类型,别写成普通布尔函数。

type ID = string | number;

常用工具类型

部分、挑选、省略、记录这些工具类型都基于映射类型,改写已有类型不必重复声明字段。返回值类型工具还能从函数反推结果类型,省去手写两处同步。

type Draft = Partial;