TypeScript 中定义类型的两种方式:

接口(interface)和 类型别名(type alias)。

  1. type Point = {
  2. x: number;
  3. y: number;
  4. };
  5. type SetPoint = (x: number, y: number) => void;
  6. interface Point {
  7. x: number;
  8. y: number;
  9. }
  10. interface SetPoint {
  11. (x: number, y: number): void;
  12. }
  13. interface SetPoint {
  14. (x: number, y: number): void;
  15. }

typeof 操作符可以用来获取一个变量或对象的类型。

  1. const defaultOption = {
  2. timeout: 500
  3. }
  4. type Opt = typeof defaultOption

keyof

keyof 与 Object.keys 略有相似,只不过 keyof 取 interface 的键。

避免使用any

  1. function get<T extends object, K extends keyof T>(o: T, name: K): T[K] {
  2. return o[name]
  3. }

查找类型

  1. interface Person {
  2. addr: {
  3. city: string,
  4. street: string,
  5. num: number,
  6. }
  7. }
  8. const addr: Person["addr"] = {
  9. city: 'string',
  10. street: 'string',
  11. num: 2
  12. }

泛型

  1. interface API {
  2. '/user': { name: string },
  3. '/menu': { foods: string[] }
  4. }
  5. const get = <URL extends keyof API>(url: URL): Promise<API[URL]> => {
  6. return fetch(url).then(res => res.json());
  7. }
  8. get('');
  9. get('/menu').then(user => user.foods);

类型断言