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泛型的案例代码具体解释的更多相关文章

  1. TypeScript 泛型及应用

    TypeScript 泛型及应用 一.泛型是什么 二.泛型接口 三.泛型类 四.泛型约束 4.1 确保属性存在 4.2 检查对象上的键是否存在 五.泛型参数默认类型 六.泛型条件类型 七.泛型工具类型 ...

  2. TypeScript 泛型(generic) 入门介绍

    TypeScript 泛型函数 下面来创建第一个使用泛型的例子:identity函数.这个函数会返回任何传入它的值.你可以把这个函数当成是echo命令.不用泛型的话,这个函数可能是下面这样: func ...

  3. iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)

    iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)   这里我们就直接上实例: 一:新建一个项目singleV ...

  4. 用JS添加文本框案例代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. SQL Server 表的管理_关于事务的处理的详解(案例代码)

    SQL Server 表的管理_关于事务的处理的详解(案例代码) 一.SQL 事务 1.1SQL 事务 ●事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序 ...

  6. SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...

  7. SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE tabl ...

  8. SQL Server 表的管理_关于事务操作的详解(案例代码)

    SQL Server 表的管理_关于事务操作的详解(案例代码) 1.概念 事务(transaction): 是将多个修改语句组合在一起的方法,这个方法中的所有语句只有全部执行才能正确完成功能.即要么全 ...

  9. JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇

    JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇 作为一个使用Java语言开发的程序员,我们都知道,要想运行Java程序至少需要安装JRE(安装JDK也没问题).我们也知道我们Java程序 ...

随机推荐

  1. HashMap的尾部遍历问题--Tail Traversing

    在看网上HashMap的resize()设计时,提到尾部遍历.   JDK1.7的HashMap在实现resize()时,新table[]的列表采用LIFO方式,即队头插入.这样做的目的是:避免尾部遍 ...

  2. 【PL/SQL】触发器示例:记录加薪

    首先创建一张表,用于保存薪资变化情况: --创建加薪记录表 CREATE TABLE scott.raisedsalarylog ( empno ) NOT NULL PRIMARY KEY, --员 ...

  3. 用最简单的脚本完成supertab的基本功能并实现一个更加合理的功能

    supertab是vim的一个出名的插件, 相信会vim的人没几个不知道的, 我在之前的<<vim之补全1>>中首先说明的也是它, supertab实现的功能简单的说就是用ta ...

  4. iOS实现图形编程可以使用三种API(UIKIT、Core Graphics、OpenGL ES及GLKit)

    这些api包含的绘制操作都在一个图形环境中进行绘制.一个图形环境包含绘制参数和所有的绘制需要的设备特定信息,包括屏幕图形环境.offscreen 位图环境和PDF图形环境,用来在屏幕表面.一个位图或一 ...

  5. sqlserver 批量更新

    select * from [LPicture] UPDATE [dbo].[LPicture] SET [picGroup] = ' WHERE LPictureid ,); select * fr ...

  6. day06-数字类型、字符串类型内置方法

    目录 数字类型内置方法 字符串类型内置方法 有序 or 无序 可变 or 不可变 数字类型内置方法 1. int()强制类型转化成整型 age_str = '18' # 定义字符串 age = int ...

  7. docker安装kong和kong-dashboard

    1:docker安装遵循官方手册 2:安装kong 参考文档:https://getkong.org/install/docker/ 安装过程基本和文档一致,文档十分简单清晰. 但应注意,为了最新版k ...

  8. SLF4J和Logback和Log4j和Logging的区别与联系

    本文转载自:一个著名的日志系统是怎么设计出来的?(作者:刘欣) 前言 Java帝国在诞生之初就提供了集合.线程.IO.网络等常用功能,从C和C++领地那里吸引了大量程序员过来加盟,但是却有意无意地忽略 ...

  9. C#关键字详解第二节

    base:基类 在有些书中base的解释为表示父类,没错,base可以表示父类,但我更想理解成基类,因为更原始更具象,既 然是类,那么他就符合面向对象的设计规则和特点,我们知道面向对象的三个特点是封装 ...

  10. 【Codeforces 467C】George and Job

    [链接] 我是链接,点我呀:) [题意] 让你从1..n这n个数字中 选出来k个不相交的长度为m的区间 然后这个k个区间的和最大 求出这k个区间的和的最大值 [题解] 设dp[i][j]表示前i个数字 ...