banner
banner
banner
NEWS LETTER

TS-泛型 <>

Scroll down

无法创建泛型枚举和泛型命名空间

泛型变量T

相当与一个形参变量,只是它返回的是值的类型,传什么类型就返回什么类型,保证传入的值和返回的类型相同

1
2
3
4
function test<T>(arg: T): T { 
return arg
}
let a = test<string>('arg')

泛型函数

  • 调用签名的对象字面量来定义泛型函数

1
let mytest: {<T>(arg: T): T} = identity
  • 泛型接口

1
2
3
4
5
6
7
interface fnType{
<T>(arg : T) : T
}
function test<T>(arg: T): T {
return arg
}
let mytest: fnType = test // 添加类型指定泛型类型
  • 泛型类 ClassName: 指的是实例部分的类型,类的静态属性不能使用

1
2
3
4
5
class GenericNumber<T> {
zeroValue: T
add: (x: T, y: T) => T
}
let myGenericNumber = new GenericNumber<number>()

泛型约束

  • 操作某类型的值时,发现某类型具有T类型,但在调用某个属性时,编译器不能保证T中具有该属性就会报错。所以要继承一个任意类的包含的属性,这样在任意类型中就可以使用且不报错

    1
    2
    3
    4
    5
    6
    7
    8
    interface Lengthwise { // 1.将这个属性放在接口中
    length : number
    }
    function check<T extends Lengthwise>(arg: T) : T{ // 2.让T继承这个接口
    console.log(arg.length)
    return arg
    }
    check({length: 10}) // 3.使用,一定要传入length里的必须属性
  • 在泛型约束中使用类型参数:通过调用属性名从对象上获取属性,同时保证这个属性就在这个对象上

1
2
3
function getProperty(obj: T, key: K){
return obj[key] // obj[]是对象的一种写法,将key作为obj里面的一个key,返回value
}
  • 在泛型里使用类类型: 使用泛型创建工厂函数时,需要引用构造函数的类类型

  • 调用的函数可以调用继承父类的方法
  • 使用场景: 多个类继承一个父类
  • 定义:定义几个类和一个父类,然后创建多个子类继承父类,并且子类中将某个子类赋值给变量(这个变量要统一),这样就可以使用多个子类、某个类和父类的方法和变量
  • 使用:createInstance(子类).父类方法.子类方法
    1
    2
    3
    function createInstance<T extends 父类>(c: new() =>T): T { 
    return new c();
    }
其他文章
cover
TS-基础类型和类型推论
  • 24/11/01
  • 11:40
  • TypeScript
cover
TS-函数和this
  • 24/11/01
  • 11:40
  • TypeScript
目录导航 置顶
  1. 1. 泛型变量T
  2. 2. 泛型函数
    1. 2.1. 调用签名的对象字面量来定义泛型函数
    2. 2.2. 泛型接口
    3. 2.3. 泛型类 ClassName: 指的是实例部分的类型,类的静态属性不能使用
  3. 3. 泛型约束
    1. 3.1. 在泛型约束中使用类型参数:通过调用属性名从对象上获取属性,同时保证这个属性就在这个对象上
    2. 3.2. 在泛型里使用类类型: 使用泛型创建工厂函数时,需要引用构造函数的类类型
请输入关键词进行搜索