一、泛型的基本使用

与extends的区别

  • 泛型可以理解为宽泛的类型,通常用于类和函数。使用的时候我们再指定类型

  • 泛型不仅可以让我们的代码变得克加健壮,还能让我们的代;码在变得键壮的r时保持灵活性和可五用性通过用

  • <T>来表示,放在参数的前面

    export default {}let getArray = <T>(value: T, items: number): T[] => {return new Array(items).fill(value)
    }
    let res1 = getArray<string>("饕餮", 98)
    let res2 = getArray<number>(69, 96)
    console.log(res1);
    console.log(res2);

    二、泛型约束

    在TS中,我们需要严格的设置各种类型,我们使用泛型之后,将会变得更加灵活,但同时也将会存在一些问题我们需要对泛型进行约束来解决这些问题

    export default {}interface ILength {length: number
    }
    function getLength<T extends ILength>(arr: T): number {return arr.length
    }
    getLength([1, 2, 3, 4]);
    getLength(["成果", "诸葛大力"]);
    getLength("成果")
    console.log(getLength([1, 2, 3, 4]));
    console.log(getLength(["成果", "诸葛大力"]));
    console.log(getLength("成果"));
    

    三、泛型接口

  • 将泛型与接口结合起来使用,可以大大简化我们的代码,增加我们的代码可读性

  • 泛型也可以使用默认值

    export default {}
    interface IPerson<T1 = string, T2 = string> {name: T1sex: T2
    }
    let p0: IPerson = {name: "成果",sex: "女"
    }
    console.log(p0);

    四、泛型类

    泛型类看上去与泛型接口差不多。泛型类使用(<>)括起泛型类型,跟在类名后面。

    export default {}class Person<T1, T2>{name: T1age: T2sex: T1constructor(name: T1, age: T2, sex: T1) {this.name = name;this.age = age;this.sex = sex;}
    }
    let p = new Person<string, number>("成果", 18, "女")
    console.log(p);
    

    implements子句

  • 类可以实现接口,使用关键字implements

  • 可以使用一个implements子句来检查一个类,是否满足了一个特定的接口。如果一个类不能正确地实现它,就会发出一个错误

    注意点:

    实现一个带有可选属性的接口并不能创建该属性 只要一个接口继承了某个类,那么就会继承这个类中所有的属性和方法;但是只会继承属性和方法的声明,不会继承属―性和方法实现

  • extends:继承某个类,继承之后可以使用父类的方法,也可以重写父类的方法

  • implements:继承某个类,必须重写才可以使用

    export default {}
    interface IPersonInfo {name: string;age: number;sex?: string;show(): void;
    }
    interface IMusic {music: string
    }
    class person implements IPersonInfo, IMusic {name: string = "成果";age: number = 27;sex: string = "女"music: string = "我不会唱歌"show() {console.log(`我是${this.name},年龄${this.age}岁,我主演了爱情公寓5`);}
    }
    let p = new person();
    p.show()
    //p.sex = "女"//报错// 注意点:只要一个接口继承了某个类,那么就会继承这个类中所有的属性
    // 和方法但是只会继承属性和方法的声明,不会继承属性和方法实现
    interface ITest extends person {name: string
    }
    class Star extends person implements ITest {name: string = "成果"age: number = 25salary: number = 1000000
    }
    let s = new Star();
    console.log(s.name);
    console.log(s.age);
    console.log(s.salary);

Typescript泛型与implements子句相关推荐

  1. TypeScript泛型与其他补充类型

    一.类的使用 1.implements 子句 类可以实现接口,使用关键字 implements 可以使用一个 implements 子句来检查一个类,是否满足了一个特定的接口.如果一个类不能正确地实现 ...

  2. 泛型 typescript_如何把你的头围绕Typescript泛型

    泛型 typescript by Nadeesha Cabral 通过Nadeesha Cabral 如何把你的头围绕Typescript泛型 (How to wrap your head aroun ...

  3. TypeScript - 泛型

    前言 本文主要记录下 TypeScript 泛型知识点,日常学习总结篇. 一.概念 泛型(Generics)是指在定义函数.接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性. ...

  4. TypeScript 泛型

    TS里面有泛型让我很意外,这个比AS3确实要强大: let myIdentity_change : <T>(arg:T)=>T=function(a){ return a };con ...

  5. TypeScript泛型约束

    泛型约束 有了泛型之后,一个函数或容器类能处理的类型一下子扩到了无限大,似乎有点失控的感觉.所以这里又产生了一个约束的概念.我们可以声明对类型参数进行约束. 我们还拿上文中的student栗子来说,想 ...

  6. TypeScript泛型详解

    泛型 泛型(Generics)是指在定义函数.接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性. 示例 我们先实现一个student方法获取不同属性来看看使用: JavaScr ...

  7. TypeScript泛型工具

    Required 将类型的属性变成必选 interface Person {name?: stringage?: numberhobby?: string[] }// 下面的类型不用定义, TypeS ...

  8. TypeScript 泛型T使用整理

    一.介绍 相C#和Java等以上,TypeScript可以使用泛型来创建可重用的组件.支持当前数据类型,同时也能支持未来的数据类型.扩展灵活. 二.泛型的定义.使用 使用泛型可以创建泛型函数.泛型接口 ...

  9. 【TS】1368- 秒懂 TypeScript 泛型工具类型!

    阿宝哥精心准备的<轻松学 TypeScript> 视频教程已经更新到第十九期了,合集播放量已达 14W+.通过形象生动的动画,让你轻松搞懂 TypeScript 的难点和核心知识点! 如果 ...

最新文章

  1. 联想服务器x3650硬盘黄灯,服务器故障处理 X3650M4主板故障 硬盘黄灯 内存错误 联想(IBM)服务器配件...
  2. 半年没活动了,来活动一下
  3. html瀑布式原理,纯css3+html瀑布流效果
  4. Pyramid Scene Parsing Network
  5. OSI七层模型、数据封装与解封装过程、TCP三次握手、四次挥手
  6. hibernate 环境搭建测试
  7. C#获取存储过程的 Return返回值和Output输出参数值
  8. kafka 脚本发送_Kafka笔记归纳(第五部分:一致性保证,消息重复消费场景及解决方式)...
  9. leetcode 高薪_利用两种不同的方法解LeetCode第1312题:让字符串成为回文串的最少插入次数
  10. 时间序列深度学习:状态 LSTM 模型预测太阳黑子(上)
  11. XShell/Xftp免费版下载及安装教程
  12. PHP常用函数性能对比
  13. Kali Linux-SET社会工程学攻击
  14. 使用Windows Powershell卸载和安装Win10 原生应用的方法
  15. 分布式服务治理及优化经验
  16. -webkit-touch-callout禁止长按菜单
  17. cadence allegro - E
  18. 中国移动物联卡用户超2600万 目标2020年物联网收入规模达千亿
  19. JavaScript学习第二部-js的基础语法和语句
  20. 再看《蜂蜜与四叶草》

热门文章

  1. 西安交通大学计算机博士名单,2017年西安交通大学博士生拟录取名单公示(3)
  2. 机器学习基石(林軒田)笔记之十二
  3. TensorFlow RNN MNIST字符识别Demo快速了解TF RNN核心框架
  4. 如何爬取微信公众号的所有文章
  5. VMVare中Ubuntu报错:Drag and drop is not supported
  6. HiveSql计算占比、同比、占环比
  7. 个人跨境电商要多少钱?新手怎么做跨境电商?
  8. Vue.js 实现简易购物车(商品的增加删除,价格的小计和总计)
  9. 宏转录组测序数据菌株层面的分析软件总结
  10. java暗黑破坏神,《暗黑破坏神2》1.10 雇用兵详细介绍