H5我爱编程

TypeScript 泛型-泛型类型

2018-01-07  本文已影响1610人  sunxiaochuan

源码

//声明一个泛型类型的函数
function  Hello<T>(arg:T):T {
    return arg;
}
//声明一个方法该方法引用上面的泛型类型的函数
let myHello:<T>(arg:T) => T = Hello;
alert(myHello('xiaochuan'));
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TypeScript 泛型-泛型类型</title>
</head>
<body>
    <script type="text/javascript" src="GenericsDemo.js"></script>
</body>
</html>
image.png

扩展

//简单的解释 => 表达式
//myFunc 函数名称  +  参数类型  + 返回值类型
//后面是定义这个函数的内容  参数必须是 number 类型 返回值也必须是 string 类型
// let myFunc:(a:number) => string = function(a:number):string{
//  return 'hello' + a;
// }
//实际上在后面定义函数实际内容的时候其本身就有 函数检查  所以其实可以将这个函数写成如下所示的样子
let myFunc = function(a:number):string{
    return 'hello' + a;
}
alert(myFunc(2));
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TypeScript 泛型-泛型类型</title>
</head>
<body>
    <!-- <script type="text/javascript" src="GenericsDemo.js"></script> -->
    <script type="text/javascript" src="Lam.js"></script>
</body>
</html>
image.png

使用另一种方法实现示例一的功能

// //声明一个泛型类型的函数
function  Hello<T>(arg:T):T {
    return arg;
}
// //声明一个方法该方法引用上面的泛型类型的函数
// let myHello:<T>(arg:T) => T = Hello;
// alert(myHello('xiaochuan'));


//使用另一种写法实现上面的定义
let myHello:{<T>(arg:T):T} = Hello;
alert(myHello('xiaochuan'));
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TypeScript 泛型-泛型类型</title>
</head>
<body>
    <script type="text/javascript" src="GenericsDemo.js"></script>
    <!-- <script type="text/javascript" src="Lam.js"></script> -->
</body>
</html>
image.png

下面是在接口中泛型的使用

//下面是在接口中对泛型的使用
//定义一个有一个泛型函数的接口
interface Hello{
    //定义一个泛型的函数
    <T>(arg:T):T;
}
//声明一个泛型函数
function myHello<T>(arg:T):T{
    return arg;
}
//声明一个引用 Hello 接口类型的函数 函数的值引用 myHello 函数
let MH:Hello = myHello;
// alert(MH('xiaochuan'));//这样并没有用到泛型
//下面是使用泛型的好处的实现
alert(MH<string>('xiaochuan'));
image.png

下面是在接口中对泛型使用的另一种写法

//下面是在接口中对泛型使用的另一种写法
//在接口定义的时候就指定其为泛型
interface Hello<T>{
    (arg:T):T;
}
//声明一个泛型函数
function myHello<T>(arg:T):T{
    return arg;
}
//声明一个引用自接口且为 number 类型的函数
let mh:Hello<number> = myHello;
//这样的话这个参数就只能是 number 类型
alert(mh(29));
image.png
上一篇下一篇

猜你喜欢

热点阅读