# TypeScript 速查

## 基础类型

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

```typescript
let count: number = 0;
```

## 接口与 type

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

```typescript
interface User { id: number }
```

## 泛型

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

```typescript
type Box<T> = { value: T };
```

## 联合类型与字面量

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

```typescript
type Status = "idle" | "done";
```

## 类型守卫

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

```typescript
type ID = string | number;
```

## 常用工具类型

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

```typescript
type Draft = Partial<User>;
```
