【第7篇】TypeScript泛型的案例代码具体解释
8.1最简单泛型样例
Ts代码
|
/** * 没有泛型,我们要么必须给身份功能的特定类型 */ function identity1(arg: number): number { return arg; } /** * 或者:我们能够描写叙述使用“随意”类型的标识功能: */ function identity2(arg: any): any { return arg; } |
Js文件
|
/** * 没有泛型。我们要么必须给身份功能的特定类型 */ function identity1(arg) { return arg; } /** * 或者:我们能够描写叙述使用“随意”类型的标识功能: */ function identity2(arg) { return arg; } |
8.2泛型类型与接口
Ts代码一
|
/** * Working with Generic Type Variables * 与泛型类型变量 */ function _identity1<T>(arg: T): T { return arg; } /** * 假设还想记录的说法“arg”与每一个调用控制台的长度。我们或许会这样写 */ function loggingIdentity1<T>(arg: T): T { // console.log(arg.length); // Error: T doesn't have .length return arg; } /** *当我们这样做时。编译器会给出我们,我们使用的是“ARG”的“.length”成员的错误,但远不具备,我们说,“ARG”有这种成员。 请记住。我们在前面说。这些类型变量站在不论什么和全部类型的,所以有人使用此功能能够通过在一个'数'。而不是,它没有一个“.length”成员。 *例如说,我们实际上已经预期该功能直接对T的阵列,而那件T的工作。因为我们正在使用的阵列,对象.length成员应该可用。 我们能够这样描写叙述这就像我们将创建其它类型的数组: */ function loggingIdentity2<T>(arg: T[]): T[] { console.log(arg.length); return arg; } /** *我们还能够写成这种模式 ,一个数组.length,这样避免很多其它的错误 */ function loggingIdentity3<T>(arg: Array<T>): Array<T> { console.log(arg.length); return arg; } |
Ts编译js代码一
|
/** * Working with Generic Type Variables * 与泛型类型变量 */ function _identity1(arg) { return arg; } /** * 假设还想记录的说法“arg”与每一个调用控制台的长度。 我们或许会这样写 */ function loggingIdentity1(arg) { // console.log(arg.length); // Error: T doesn't have .length return arg; } /** *当我们这样做时,编译器会给出我们,我们使用的是“ARG”的“.length”成员的错误,但远不具备,我们说,“ARG”有这种成员。 请记住,我们在前面说,这些类型变量站在不论什么和全部类型的,所以有人使用此功能能够通过在一个'数',而不是,它没有一个“.length”成员。 *例如说,我们实际上已经预期该功能直接对T的阵列,而那件T的工作。因为我们正在使用的阵列,对象.length成员应该可用。 我们能够这样描写叙述这就像我们将创建其它类型的数组: */ function loggingIdentity2(arg) { console.log(arg.length); return arg; } /** *我们还能够写成这种模式 ,一个数组.length,这样避免很多其它的错误 */ function loggingIdentity3(arg) { console.log(arg.length); return arg; } |
Ts代码二
|
/** *在前面的章节中,我们创建了工作的范围内的类型的通用身份的功能。在本节中,我们将探讨的功能类型本身, *以及怎样创建通用接口.通用函数的类型就像那些非通用功能,具有类型參数首家上市,类似于函数声明 */ function identity3<T>(arg: T): T { return arg; } var myIdentity3: <T>(arg: T)=>T = identity3; /** * 我们也能够用不同的名称在类型一般类型參数,所以仅仅要类型变量的数量和怎样类型变量用于排队 */ function identity4<T>(arg: T): T { return arg; } var myIdentity4: <U>(arg: U)=>U = identity4; /** * 我们也能够写泛型类型为对象文本类型的调用签名 */ function identity5<T>(arg: T): T { return arg; } var myIdentity5: {<T>(arg: T): T} = identity5; /** * 这使我们写我们的第一个通用interface接口。让我们以字面对象从曾经的样例,它移动到一个界面: */ interface GenericIdentityFn1 { <T>(arg: T): T; } function identity6<T>(arg: T): T { return arg; } var myIdentity6: GenericIdentityFn1 = identity6; /** * 在一个类似的样例。我们可能要移动的通用參数是整个接口的參数。这让我们看到什么类型。我们是在通用 * (如:Dictionary<String>而不不过字典)。这使得该类型參数可见的接口的全部其它成员。 */ interface GenericIdentityFn2<T> { (arg: T): T; } function identity7<T>(arg: T): T { return arg; } var myIdentity7: GenericIdentityFn2<number> = identity7; |
Ts编译js代码二
|
/** * *在前面的章节中。我们创建了工作的范围内的类型的通用身份的功能。在本节中。我们将探讨的功能类型本身, *以及怎样创建通用接口.通用函数的类型就像那些非通用功能,具有类型參数首家上市,类似于函数声明 */ function identity3(arg) { return arg; } var myIdentity3 = identity3; /** * 我们也能够用不同的名称在类型一般类型參数,所以仅仅要类型变量的数量和怎样类型变量用于排队 */ function identity4(arg) { return arg; } var myIdentity4 = identity4; /** * 我们也能够写泛型类型为对象文本类型的调用签名 */ function identity5(arg) { return arg; } var myIdentity5 = identity5; function identity6(arg) { return arg; } var myIdentity6 = identity6; function identity7(arg) { return arg; } var myIdentity7 = identity7; |
8.3泛型类型与类
Ts代码
|
//泛型类也有类似形状的通用接口。 泛型类在尖括号泛型类型參数列表 //--T class GenericNumber<T> { zeroValue: T; add: (x: T, y: T) => T; } /*------number数字类型-----*/ var myGenericNumber = new GenericNumber<number>(); myGenericNumber.zeroValue = 0; myGenericNumber.add = function(x, y) { return x + y; }; /*------string字符串类型-----*/ var stringNumeric = new GenericNumber<string>(); stringNumeric.zeroValue = ""; stringNumeric.add = function(x, y) { return x + y; }; alert(stringNumeric.add(stringNumeric.zeroValue, "test")); //-----------------Generic Constraints---- /*****声明一个接口,来约束**********/ interface ILength { length: number;//声明一个number类型 } //-function用extends关键继承这个ILength接口约束。 。 function loggingIdentity<T extends ILength>(arg: T): T { console.log(arg.length); //获取这个length值 return arg; } //调用这个loggingIdentity方法 var object=loggingIdentity({length: 10, value: 3}); /** *在使用泛型类的类型 *当我们用typescript去创建工厂的时候。因此有必要通过其构造函数来引用类类型 */ function create<T>(c: {new(): T; }): T { return new c(); } /** *使用:一个更高级的演示样例使用原型属性来判断和约束的构造函数和类类型的实例側之间的关系 */ //养蜂人 class BeeKeeper { hasMask: boolean; } //动物管理人. class ZooKeeper { nametag: string; } //动物 class Animals { numLegs: number; } //蜜蜂 class Bee extends Animals { keeper: BeeKeeper; } //狮子 class Lion extends Animals { keeper: ZooKeeper; } //管理人. function findKeeper<A extends Animals, K> (a: {new(): A; prototype: {keeper: K}}): K { return a.prototype.keeper; } //findKeeper(Lion).nametag; // 检查类型! /** *jQuery---- * */ $(function(){ var len=$(object).attr("length");//获取这个length值 var value=$(object).attr("value");//获取这个value值 //alert(len); //alert(value); //var obj1:Animals=Lion; //console.log( findKeeper(Lion).nametag);//检查类型! }); |
Ts 文件编译js代码
|
/** *Generic Classes * */ var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; //泛型类也有类似形状的通用接口。泛型类在尖括号泛型类型參数列表 //--T var GenericNumber = (function () { function GenericNumber() { } return GenericNumber; })(); /*------number数字类型-----*/ var myGenericNumber = new GenericNumber(); myGenericNumber.zeroValue = 0; myGenericNumber.add = function (x, y) { return x + y; }; /*------string字符串类型-----*/ var stringNumeric = new GenericNumber(); stringNumeric.zeroValue = ""; stringNumeric.add = function (x, y) { return x + y; }; alert(stringNumeric.add(stringNumeric.zeroValue, "test")); //-function用extends关键继承这个ILength接口约束。 。 function loggingIdentity(arg) { console.log(arg.length); //获取这个length值 return arg; } //调用这个loggingIdentity方法 var object = loggingIdentity({ length: 10, value: 3 }); /** *在使用泛型类的类型 *当我们用typescript去创建工厂的时候,因此有必要通过其构造函数来引用类类型 */ function create(c) { return new c(); } /** *使用:一个更高级的演示样例使用原型属性来判断和约束的构造函数和类类型的实例側之间的关系 */ //养蜂人 var BeeKeeper = (function () { function BeeKeeper() { } return BeeKeeper; })(); //动物管理人. var ZooKeeper = (function () { function ZooKeeper() { } return ZooKeeper; })(); //动物 var Animals = (function () { function Animals() { } return Animals; })(); //蜜蜂 var Bee = (function (_super) { __extends(Bee, _super); function Bee() { _super.apply(this, arguments); } return Bee; })(Animals); //狮子 var Lion = (function (_super) { __extends(Lion, _super); function Lion() { _super.apply(this, arguments); } return Lion; })(Animals); //管理人. function findKeeper(a) { return a.prototype.keeper; } //findKeeper(Lion).nametag; // 检查类型! /** *jQuery---- * */ $(function () { var len = $(object).attr("length"); //获取这个length值 var value = $(object).attr("value"); //获取这个value值 //alert(len); //alert(value); //var obj1:Animals=Lion; //console.log( findKeeper(Lion).nametag);//检查类型! }); |
Html文件測试
|
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="../../plugins/jquery-2.1.4.min.js"></script> <script src="../test-4.js" type="text/javascript"></script> </head> <body> <div id="msg1"></div> <br/> <div id="msg2"></div> </body> </html> |
【第7篇】TypeScript泛型的案例代码具体解释的更多相关文章
- TypeScript 泛型及应用
TypeScript 泛型及应用 一.泛型是什么 二.泛型接口 三.泛型类 四.泛型约束 4.1 确保属性存在 4.2 检查对象上的键是否存在 五.泛型参数默认类型 六.泛型条件类型 七.泛型工具类型 ...
- TypeScript 泛型(generic) 入门介绍
TypeScript 泛型函数 下面来创建第一个使用泛型的例子:identity函数.这个函数会返回任何传入它的值.你可以把这个函数当成是echo命令.不用泛型的话,这个函数可能是下面这样: func ...
- iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)
iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController) 这里我们就直接上实例: 一:新建一个项目singleV ...
- 用JS添加文本框案例代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- SQL Server 表的管理_关于事务的处理的详解(案例代码)
SQL Server 表的管理_关于事务的处理的详解(案例代码) 一.SQL 事务 1.1SQL 事务 ●事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序 ...
- SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)
SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...
- SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)
SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE tabl ...
- SQL Server 表的管理_关于事务操作的详解(案例代码)
SQL Server 表的管理_关于事务操作的详解(案例代码) 1.概念 事务(transaction): 是将多个修改语句组合在一起的方法,这个方法中的所有语句只有全部执行才能正确完成功能.即要么全 ...
- JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇
JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇 作为一个使用Java语言开发的程序员,我们都知道,要想运行Java程序至少需要安装JRE(安装JDK也没问题).我们也知道我们Java程序 ...
随机推荐
- [转]HTML5 Day 4: Add Drop Down Menu to ASP.NET MVC HTML5 Template using CSS and jQuery
本文转自:http://pietschsoft.com/post/2010/11/17/HTML5-Day-4-Add-DropDown-Menu-ASPNET-MVC-HTML5-Template- ...
- PD(Power Delivery)充电协议
关于PD的历史进程,可以在我转载的另一篇文章中了解 http://www.cnblogs.com/Hello-words/p/7851627.html PD 1.0 用的是 BFSK在 VBUS上进行 ...
- JS高级——Function原型链
基本概念 1.函数可以通过Function new出来,那么Function可以被称作构造函数,被new出来的函数可以被称为一个对象 2.Function既然是构造函数,那么肯定也有原型,它的原型是一 ...
- VC++ 遍历文件夹
}; strcpy_s(szFind, MAX_PATH, m_szDir); strcat_s(szFind, "\\*.*"); WIN32_FIND_DATA wfd; HA ...
- zabbix配置邮件报警(第四篇)
zabbix配置邮件报警(第四篇) 邮件报警可采用本地邮件服务,也可以自定义脚本,这里我采用本地邮件服务报警 添加收件人
- lsof command not found 解决
有些centos 没有 lsof命令,需要安装 yum install lsof -y 使用: lsof -i:端口号
- CAD动态绘制带面积周长的圆(com接口)
CAD绘制图像的过程中,画圆的情况是非常常见的,用户可以在控件视区点取任意一点做为圆心,再动态点取半径绘制圆. 主要用到函数说明: _DMxDrawX::DrawCircle 绘制一个圆.详细说明如下 ...
- 00 python基础知识
''' ''' print('hello world!') ''' 变量 ''' # 变量的:‘tank’,会在内存中产生一份内存地址 #变量名:相当于一个门牌号,用于与变量进行绑定 # = :用来把 ...
- 一个ROS的服务,使机器人向前移动指定距离
源代码有点长,放文末链接里了. 服务描述及代码现在的服务是:请求时携带要前进的距离,然后底盘前进相应距离.代码如下,改动很小: #!/usr/bin/env python import rospyfr ...
- C# 泛基
1 你有时候希望在父类规定一些行为,让子类无法修改,但是这些实现是依赖一个子类才能获取的值,你又不可能知道所有的子类 ,没办法替它在父类里面初始化,这时候就需要在父类里面定义一个每个子类一个的,但又是 ...