美文网首页
五、泛型

五、泛型

作者: zdxhxh | 来源:发表于2020-02-19 10:01 被阅读0次

泛型

软件工程中,需要定义良好且一致的API,也考虑可重用性,组件不仅仅支持当前的数据类型,也应该支持未来的数据类型。

在像 C# 和 Java 这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。

示例

这里,我们使用了类型变量,它是一种特殊的变量,只用于表示类型而不是值。

我们在<>中,添加了类型变量T,T帮助我们捕获开发者传入的类型(如 : number),我们就可以使用这个类型了。

function hello<T>(arg : T) {
  return arg 
}

我们定义了泛型函数后,可以使用两种方法。第一种是传入所有的参数,包括类型函数

hello<string>('hello')

另外一种是类型推断

hello('hello')

1. 使用泛型变量

可以像上面的例子一样在函数中使用泛型变量。

function hello<T>(arg : T) {
  return arg 
}

当我希望arg是一个T类型的数组时候,可以

function hello<T>(arg : T[]) :T[]{ 
  console.log(arg.length)
  return arg
}

2. 泛型类型

我们可以使用不同的泛型参数名,只要数量和使用方式对应上就可以了

function hello<T>(arg: T): T {
  return arg
}

let myHello: <U>(arg: U) => U = hello

在接口一章中,我们定义了一个函数类型的接口

interface SearchFunc { 
  (source : string,subString : string) :  boolean
}

同样的,我们可以在函数使用带有调用签名的对象字面量来定义泛型函数

interface HelloFn<U> { 
  (arg : U) : U
}
let myHello : HelloFn = hello
let myHello : {<U>(arg : U) : U} = hello

除了泛型接口,我们还可以创建泛型类。 注意,无法创建泛型枚举和泛型命名空间。

3. 泛型类

泛型类看上去与泛型接口写法差不多

class A<T> { 
  data : T
  add : (x : T,y : T) => T
}
let a = new A<number>()

注意 : 泛型类指的是实例部分的类型,所以类的静态属性不能使用这个泛型类型

4. 泛型约束

我们可以使用extends对泛型进行约束,如继承一个接口,这样就可以在函数中访问一些接口变量了

interface LengthWise { 
  length : number
}
function hello<T extends Lengthwise>(arg: T): T {
  console.log(arg.length)
  return arg
}

现在这个泛型函数被定义了约束,因此它不再是适用于任意类型

hello(3)  // Error 
hello({length : 6}) // OK

5. 在泛型约束中使用类型参数

你可以声明一个类型参数,且它被另一个类型参数约束。

现在我们想要用属性名从对象里获取这个属性。 并且我们想要确保这个属性存在于对象 obj 上,因此我们需要在这两个类型之间使用约束

function getProperty<T,K extends keyof T>(obj : T,key : K) { 
  return obj[key]
}

相关文章

  • 第二十八课:泛型

    泛型出现之前 泛型出现之后 Java深度历险(五)——Java泛型

  • iOS 强大的泛型

    文章围绕一下五点进行介绍: 泛型是什么为什么要用泛型泛型怎么用泛型进阶泛型的延伸使用 泛型(Generics)是什...

  • Java泛型,你都了解了吗?

    大纲一、为什么需要泛型?泛型的优点二、泛型定义三、限定"类型变量"四、泛型中的约束和局限性五、泛型类型的继承规则和...

  • 03_TypeScript学习(三)

    一. TypeScript枚举类型 二. 枚举类型的值 三. 认识泛型 四. 泛型实现类型参数化 五. 泛型的基本...

  • 五、泛型

    泛型 软件工程中,需要定义良好且一致的API,也考虑可重用性,组件不仅仅支持当前的数据类型,也应该支持未来的数据类...

  • 泛型 & 注解 & Log4J日志组件

    掌握的知识 : 基本用法、泛型擦除、泛型类/泛型方法/泛型接口、泛型关键字、反射泛型(案例) 泛型 概述 : 泛型...

  • 【泛型】通配符与嵌套

    上一篇 【泛型】泛型的作用与定义 1 泛型分类 泛型可以分成泛型类、泛型方法和泛型接口 1.1 泛型类 一个泛型类...

  • 泛型的使用

    泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法 泛型类 泛型接口 泛型通配符 泛型方法 静态方法与...

  • Java 泛型

    泛型类 例如 泛型接口 例如 泛型通配符 泛型方法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型上下边...

  • 探秘 Java 中的泛型(Generic)

    本文包括:JDK5之前集合对象使用问题泛型的出现泛型应用泛型典型应用自定义泛型——泛型方法自定义泛型——泛型类泛型...

网友评论

      本文标题:五、泛型

      本文链接:https://www.haomeiwen.com/subject/uviofhtx.html