ts笔记-泛型

泛型用于在成员之间提供有意义的约束,这些成员可以是类的实例成员、类的方法、函数参数、函数返回值。

class Queue<T> {
  private data: T[] = [];
  push(item: T) {
    this.data.push(item)
  }

  pop(): T | undefined {
    return this.data.shift()
  }
}


// 示例一
const queue = new Queue<number>();
queue.push(0);
queue.push('1'); // ERROR

// 示例二

const queue = new Queue<string>();
queue.push('0');
queue.push(1); // ERROR

number做为类型传递给Queue,在内部可以使用T表示该类型,并用于内部方法和属性的约束

类成员函数

class Utility {
  reverse<T>(items: T[]): T[] {
    const toreturn = [];
    for (let i = items.length; i >= 0; i--) {
      toreturn.push(items[i]);
    }
    return toreturn;
  }
}



const a = new Utility()

const b = a.reverse<number>([1,23,'3']); // ERROR

配合Axios使用

import axios from 'axios'

// GET user

interface ResponseData<T = any> {
  code: number;
  result: T;
  message: string;
}


export function getUser<T>() {
  return axios.get<ResponseData<T>>('/user').then(res => res.data)
}


interface User {
  name: string;
  age: number;
}

async function test() {
  // user 被推断出为
  // {
  //  code: number,
  //  result: { name: string, age: number },
  //  message: string
  // }
  const user = await getUser<User>();
}

把类型User当做一个参数,更容易理解泛型推倒的过程.

posted @ 2021-10-25 14:44  wmui  阅读(118)  评论(0编辑  收藏  举报