【第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>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-09 16:47:10

【第7篇】TypeScript泛型的案例代码详解的相关文章

【第8篇】TypeScript的Mixin案例代码详解

9.1Mixin使用 Ts代码 /** * Mixin使用. * *随着传统的面向对象的层次结构,从可重用的组件建立类的另一种流行的方式是通过简单的组合部分类来构建他们. *你可能熟悉混入或性状比如Scala语言的理念,模式也达到了JavaScript的一些社区人气 */ // Disposable Mixin(一次性) class Disposable { isDisposed: boolean; dispose() { this.isDisposed = true; } } // Activ

【第6篇】TypeScript函数function的案例代码详解

7.1最简单function函数 Ts代码 /*******声明一个add方法********/ function add(x: number, y: number): number { return x+y; } /*******声明一个myAdd1方法********/ var myAdd1 = function(x: number, y: number): number { return x+y; }; /*******声明一个myAdd2方法********/ //现在我们已经输入的功能

jQuery选择器代码详解(五)——实例说明tokenize的解析过程

原创文章,转载请写明出处,多谢! 以下分析基于jQuery-1.10.2.js版本. 下面将以$("div:not(.class:contain('span')):eq(3)")为例,说明tokenize和preFilter各段代码是如何协调完成解析的.若想了解tokenize方法和preFilter类的每行代码的详细解释,请参看如下两篇文章: jQuery选择器代码详解(三)--tokenize方法 jQuery选择器代码详解(四)--Expr.preFilter 下面是tokeni

Akka第一个案例动手实战main方法实现中ActorSystem等代码详解

学习了Akka第一个案例动手实战main方法实现中ActorSystem等代码详解,创建ActorSystem实例,用acterOf创建MasterActor,用tell的方式给MasterActor发信息,睡眠一段时间给MasterActor发信息,处理完后关闭,资源回收. 案例如下: public static void main(String[] args) throws Exception{ ActorSystem_system =  ActorSystem.create("HelloA

tiny_cnn代码详解(3)——层间继承关系

在上一篇博文中我们顺利将tiny_cnn的程序调试通过,在这篇博文中我们尝试从整体角度给出对tiny_cnn这个深度学习框架的解读,重点论述一下其各个层直接类封装的继承关系. 一.卷积神经网络快速入门 tiny_cnn作为卷积神经网络的一种实现形式,在探讨其框架结构之前,首先需要简要介绍一些卷积神经网络相关的知识.首先,给出经典卷积神经网络的网络结构: 这个是经典的LeNet-5的网络结构图,五层网络.最早用于支票上的手写数字识别,也是最早的商业化的深度学习模型.从上图中可以看出,卷积神经网络主

Github-jcjohnson/torch-rnn代码详解

Github-jcjohnson/torch-rnn代码详解 [email protected] http://www.cnblogs.com/swje/ 作者:Zhouwan  2016-3-18 声明: 1)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除. 2)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢. 请联系:[email protected] 或[email protected] 本研

开胃小菜——impress.js代码详解

README 友情提醒,下面有大量代码,由于网页上代码显示都是同一个颜色,所以推荐大家复制到自己的代码编辑器中看. 今天闲来无事,研究了一番impress.js的源码.由于之前研究过jQuery,看impress.js并没有遇到太大的阻碍,读代码用了一个小时,写这篇文章用了近三个小时,果然写文章比读代码费劲多了. 个人感觉impress.js的代码量(算上注释一共不到1000行)和难度(没有jQuery的各种black magic= =)都非常适合新手学习,所以写一个总结,帮助大家理解源码. 考

DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43221829 本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参考本文第一部分的算法简介. 经详细注释的代码:放在我的gith

DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43225445 本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Convolutional Neural Networks (LeNet).经详细注释的代码和原始代码:放在我的github地址上,可下载. 一.CNN卷积神经网络原理