Skip to content

附录 ​

1. TypeScript 常见问题 ​

1.1 类型兼容性 ​

typescript
// 1. 结构类型系统
interface Named {
  name: string;
}

class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

let named: Named;
named = new Person("Alice", 30); // ✅ 兼容,因为 Person 有 name 属性

// 2. 函数类型兼容性
let x = (a: number) => 0;
let y = (b: number, s: string) => 0;

y = x; // ✅ 兼容
// x = y; // ❌ 不兼容

// 3. 枚举类型兼容性
enum Status {
  Ready,
  Waiting,
}
enum Color {
  Red,
  Blue,
  Green,
}

let status = Status.Ready;
// status = Color.Red; // ❌ 不兼容

1.2 常见错误解决 ​

typescript
// 1. 类型断言 vs 类型声明
// 类型断言:告诉编译器"我知道这是什么类型"
const element = document.getElementById("root") as HTMLElement;

// 类型声明:定义变量的类型
const element2: HTMLElement | null = document.getElementById("root");

// 2. 非空断言操作符
const element3 = document.getElementById("root")!; // 告诉编译器这不会是 null/undefined

// 3. 可选链和空值合并
const user = {
  profile: {
    name: "Alice",
  },
};

const userName = user?.profile?.name ?? "Unknown";

// 4. 类型保护
function isString(value: any): value is string {
  return typeof value === "string";
}

function process(value: string | number) {
  if (isString(value)) {
    // 这里 value 是 string 类型
    console.log(value.toUpperCase());
  } else {
    // 这里 value 是 number 类型
    console.log(value.toFixed(2));
  }
}

1.3 实用代码片段 ​

typescript
// 1. 深度克隆类型
type DeepClone<T> = {
  [K in keyof T]: T[K] extends object ? DeepClone<T[K]> : T[K];
};

// 2. 提取异步函数返回值
type AsyncReturnType<T> = T extends (...args: any[]) => Promise<infer R>
  ? R
  : T extends (...args: any[]) => infer R
    ? R
    : never;

// 3. 获取构造函数参数类型
type ConstructorParameters<T> = T extends new (...args: infer P) => any
  ? P
  : never;

// 4. 创建映射类型
type MappedType<T, U> = {
  [K in keyof T]: U;
};

// 5. 条件类型分发
type DistributedConditional<T> = T extends any ? T[] : never;

2. 学习资源推荐 ​

2.1 官方资源 ​

2.2 在线课程 ​

  • TypeScript 官方入门教程
  • 高级 TypeScript 类型编程
  • TypeScript 设计模式

2.3 推荐书籍 ​

  • 《TypeScript 编程》
  • 《Effective TypeScript》
  • 《TypeScript 深入浅出》

2.4 工具推荐 ​

  • VSCode + TypeScript 插件
  • TypeScript ESLint
  • Prettier
  • Jest + ts-jest

Released under the MIT License.