TypeScript_泛型
typescript 中很多地方都和 java 和 C# 相似,如果 有 java 和 C# 的同学入手typeScript 会简单很多,
下面这里使用代码来表示和展现泛型的定义和使用
//泛型:在类、接口、函数中对不确定(未知)的数据类型的支持,提高 类、接口、函数代码的复用性,减少冗余
//开发人员可以根据不同的数据类型使用同一个接口、函数或者类 /**
* 以下例子
* 定一个获取最小值的函数,当获对应的集合为 数字 时,需编写一个 针对数字集合 获取最小值的函数,
* 当集合为 字符串 时,则需另外定义一个针对字符串集合获取最小值得函数,
* 这时就会会造成代码的冗余,代码复用性低
* 如下:
*/
function min1(list:number[]):number{
let minRes:number = list[0];
list.forEach((item, index)=>{
if(item < minRes){
minRes = item;
}
});
return minRes;
} function min2(list:string[]):string{
let minRes:string = list[0];
list.forEach((item, index)=>{
if(item < minRes){
minRes = item;
}
});
return minRes;
} console.log(min1([9,3,4,2,5])); // 输出 2
console.log(min2(['r','a','c','b','h','f'])); // 输出 a /**
* 使用泛型则可以解决以上问题
* 传入和返回的数据类型由函数调用者自己来决定, 无需多写冗余的代码
* T 代表未知类型, 也可用用其他自定义单词或者字母表示
*/
function min<T>(list:T[]):T {
let minRes:T = list[0];
list.forEach((item, index)=>{
if(item < minRes){
minRes = item;
}
});
return minRes;
} console.log(min1([9,3,4,2,5])); // 输出 2
console.log(min2(['r','a','c','b','h','f'])); // 输出 a /**
* 泛型类
*/
class Operation<T>{
list:T[] = [];
constructor(){} add(v:T):void{
this.list.push(v);
} getList():T[]{
return this.list;
} min():T{
let minRes:T = this.list[0];
this.list.forEach((item, index)=>{
if(item < minRes){
minRes = item;
}
});
return minRes;
}
} //指定类型为number类型
let o = new Operation<number>(); //实例化类,并指定了类中 T 代表的是 number类型
//o.add('e'); //报错,必须为number类型
o.add(6);
o.add(4);
o.add(8);
o.add(7);
console.log(o.getList()); // 输出: [6, 4, 8, 7]
console.log(o.min()); //输出: 4 let o1 = new Operation<string>(); //实例化类,并指定了类中 T 代表的是 string类型
// o1.add(6); //报错,必须为字符串类型
o1.add('e');
o1.add('n');
o1.add('b');
o1.add('l');
console.log(o1.getList()); // 输出: ["e", "n", "b", "l"]
console.log(o1.min()); //输出: b /**
* 泛型接口
*/
interface Z<T> {
value:T;
getValue():T;
} //第一种: 直接在类中定义指定类型
class A implements Z<string> {
value:string;
constructor(name:string){
this.value = name;
}
getValue(): string {
return this.value;
}
} //实例化类时,传入指定类型
let a = new A('aaa');
alert(a.getValue()) //第二种:在类中指定任意类型
class B<Q> implements Z<Q> {
value :Q;
constructor(name:Q){
this.value = name;
}
getValue(): Q {
return this.value;
}
} //实例化类时,可指定任意的类型
let b = new B<number>(1111);
alert(b.getValue()); let b1 = new B<string>('b1b1b1');
alert(b1.getValue())
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.如果想定义定义静态泛型方法,只能这样写 ...
随机推荐
- spring入门篇
- android -------- 解决RecyclerView显示不全只显示一条item的问题
布局文件1 <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android= ...
- LC 968. Binary Tree Cameras
Given a binary tree, we install cameras on the nodes of the tree. Each camera at a node can monitor ...
- flink入门(一)——基本原理与应用场景
一.简介 1.简介 flink是一个开源的分布式流处理框架 优势:高性能处理.高度灵活window操作.有状态计算的Exactly-once等 详情简介,参考官网:https://flink.apac ...
- 使用C++调用并部署pytorch模型
1.背景(Background) 上图显示了目前深度学习模型在生产环境中的方法,本文仅探讨如何部署pytorch模型! 至于为什么要用C++调用pytorch模型,其目的在于:使用C++及多线程可以加 ...
- [LeetCode] 752. Open the Lock 开锁
You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots: '0', '1', '2', '3', ...
- 1、Ant和分布式介绍
{ 1.Maven 简介 2.配置Maven运行环境 3.Maven项目 4.Ant和Maven项目的简单对比 5.Maven项目之间的关系 6.War类型项目的创建(tomcat插件和资源拷贝插件) ...
- Zuul学习笔记
问题: 解决:(域名映射+前缀+禁止原来访问)
- [转帖]IBM报告:多国央行考虑发行数字货币 最快5年内问世
IBM报告:多国央行考虑发行数字货币 最快5年内问世 https://news.cnblogs.com/n/646001/ DCEP 中国央行可能是第一家发布 数字货币的央行 DCEP 是基于 UTX ...
- C++ 读取 MATLAB 的 .m 文件,并发送到 MATLAB 运行
本代码是由「Microsoft Visual Studio 2015 Enterprise」编写. 想要了解更多 C++ 与 MATLAB 混合编程的知识,可以参考我的另一篇博客:C++ 与 MATL ...