06_TypeScript泛型
1、泛型的定义
泛型就是解决 类,接口 方法的复用性,以及对不特定数据的支持(类型校验)。
2、泛型函数
//T 表示泛型,具体什么类型是调用这个方法的时候决定的,
//T可以用其他大写字母表示,传入的参数和返回的参数一致
function getData<T>(value:T):T{
return value;
}
getData<number>(123);
getData<string>('123');
getData<number>('123');//错误的写法
3、泛型类
//定义一个类,实现有个最小堆算法,需要同时支持返回数字和字符串来俩种类型
//普通写法:只能支持一种数据类型 number 或 string
class MinClass{
plublic list:number[]=[];
add(num:number){
this.list.push(num)
}
min():number{
var minNum = this.list[0];
for(var i=0;i<this.list.length;i++){
if(minNum>this.list[i]){
minNum = this.list[i]
}
}
return minNum;
}
}
var m = new MinClass<number>();
m.add(2);m.add(4);m.add(6)
console.log(m.min())
//泛型写法:可同时支持 number 和 string
class MinClass<T>{
public list:T[]=[];
add(value:T):void{
this.list.push(value)
}
min():T{
var minNum = this.list[0];
for(var i=0;i<this.list.length;i++){
if(minNum>this.list[i]){
minNum = this.list[i]
}
}
return minNum;
}
}
//实例化类,并且制定了类的T代表类型是neummber
var m = new MinClass<number>();
//实例化类,并且制定了类的T代表类型是string 传参 a-z
var m = new MinClass<string>();
m.add('a');m.add('b');m.add('c')
console.log(m.min())
4、泛型接口
//函数类型接口
interface Config{
(value1:string,value2:string):string;
}
var setData:Config=function(value1:string,value2:string):string{
return value1+value2;
}
setData('name','张三')
//泛型接口 写法一
interface Config{
<T>(value:T):T;
}
var getData:Config=function<T>(value:T):T{
return value;
}
getData<string>('123');
getData<number>(123);
//泛型接口 写法二
interface Config<T>{
(value:T):T;
}
function getData<T>(value:T):T{
return value;
}
var myGetData:Config<string>=getData;
myGetData('1223')
5、把类当作参数
//定义一个User类
class User{
username:string | undefined;
pasword:string | undefined;
}
//定义一个MyData类
class MyData{
//把User 类当作参数来验证传入参数的合法性
add(user:User):boolean{
return true;
}
}
var u = new User();
u.username = '张三';
u.pasword = '1234';
var D = new MyData();
//把类当作参数传入
D.add(u);
//定义一个User类
class User{
username:string | undefined;
pasword:string | undefined;
}
//定义一个MyData类 ,泛型写法
class MyData<T>{
add(info:T):boolean{
console.log(info);
return true;
}
}
var u = new User();
u.username = '张三';
u.pasword = '1234';
var data = new MyData<User>();
data.add(u);
06_TypeScript泛型的更多相关文章
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- .NET面试题系列[8] - 泛型
“可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...
- C#4.0泛型的协变,逆变深入剖析
C#4.0中有一个新特性:协变与逆变.可能很多人在开发过程中不常用到,但是深入的了解他们,肯定是有好处的. 协变和逆变体现在泛型的接口和委托上面,也就是对泛型参数的声明,可以声明为协变,或者逆变.什么 ...
- 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)
建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...
- 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
- C#泛型详解(转)
初步理解泛型: http://www.cnblogs.com/wilber2013/p/4291435.html 泛型中的类型约束和类型推断 http://www.cnblogs.com/wilber ...
- C# 泛型
C# 泛型 1.定义泛型类 在类定义中包含尖括号语法,即可创建泛型类: class MyGenericClass<T> { //Add code } 其中T可以遵循C#命名规则的任意字符. ...
- java8中lambda表达式的应用,以及一些泛型相关
语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...
- java 泛型
1.Student stu =tool.getObj();右边得到的是Object类型,需要向下转型,强转换. 2. 3. 4.泛型方法不能被静态修饰这样写 5.如果想定义定义静态泛型方法,只能这样写 ...
随机推荐
- vue学习笔记1:el 与 data
一.vue介绍 vue是目前三大主流框架之一(React.Angular.Vue) vue特点: 易用 灵活 高效 vue官网:官网链接 二,知识点 vue实例选项: el 注:不能 让el直接管理h ...
- pymysql 增
1.重点:数据库插入数据需要进行---------事物提交 其它:事物回滚 import pymysql # 注册用户 print("=========注册用户===========&quo ...
- Django admin的常用方法
一.HTTP 1.主页面 http://127.0.0.1:8000/admin/ 2.查询页面 http://127.0.0.1:8000/admin/app01/book/ 3.增加页面 http ...
- [bzoj3926] [loj2137] [Zjoi2015] 诸神眷顾的幻想乡
Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看. ...
- Myeclipse 2017 下载+安装+激活+集成配置【JRE 8+Tomcat 9+MySQL 5.7.29】
Myeclipse 2017 的下载 Myeclipse 2017 下载地址:https://www.jianguoyun.com/p/DTEBo1cQ6LnsBxj9984C Myeclipse 2 ...
- Intellij IDEA使用(一)项目模板类型
概述 IDEA默认打开后,会出现欢迎页面,可以选择打开Project的方式. 对于新建的Project,一般会选择[Create New Project],对于界面中,众多的Project类型,有时候 ...
- 剑指offer--二维数组中查找
剑指offer--二维数组中查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组 ...
- TypeScript——基本类型
关于数据类型 原始类型 let bool: boolean = true; let num: number = 1; let str: string = 'i am string'; 引用类型 let ...
- Linux基础:简介安装、常用命令和JDK、Mysql、Tomcat的安装
一.Linux的简介 1.Linux的概述 Linux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境.Linux是由Linus Torvalds(林纳斯 ...
- Mybatisplus代码生成器主类CodeGenerator配置
//代码自动生成public class CodeGenerator { /** * <p> * 读取控制台内容 * </p> */ public static String ...