zoukankan      html  css  js  c++  java
  • 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当做一个参数,更容易理解泛型推倒的过程.

    常用网站: SegmentFault | GitHub | 掘金社区
  • 相关阅读:
    Slimer软工课设日报-2016年6月30日
    Slimer软工课设日报-2016年6月29日
    软件工程个人总结
    什么是Bug
    构建之法读后感----第1章 绪论
    7.4
    7.1-7.3
    6.29
    软件工程课设 第二天
    软工总结 作业
  • 原文地址:https://www.cnblogs.com/yesyes/p/15458515.html
Copyright © 2011-2022 走看看