typescript泛型

函数后面有一个<>尖括号表示申明类型

为了函数的通用性,通常不会很限制变量的类型,但是有时候如果使用any类型的话,传入的类型和返回的类型可能不会相同

function identity(arg: any): any {
    return arg;
}

当我们需要让方法的返回值的类型和传入参数的类型相同的话,我们使用 类型变量 ,只表示类型不表示值
identity添加了类型变量TT捕获用户传入的类型,然后我们再次用了T当作返回值的类型

下面尖括号中的T不是固定的,可以是T1,A,B
function identity<T>(arg: any): T {
    return arg;
}
identity<String, Number>(arg: String, num: Number):String {
        return arg; // 返回num会报错
}
identity<T, Q>(arg: String, num: Number):Number {
        return num; // 返回arg会报错
}
// 下面这个是有问题的,因为返回的值的类型是Q,不是Number
identity<T, Q>(arg: String, num: Number):Q {
        return num;
}
// 这个就是正确的,可运行的,因为any是任何类型都可以(包含Q)
identity<T, Q>(arg: String, num: any):Q {
        return num;
}
// 这个下面会报错,因为返回的num是Q类型,不是T类型
identity<T, Q>(arg: T, num: Q): T {
        return num;
}
// 这个运行的是正常的
identity<T, Q>(arg: Q, num: T): T {
        return num;
}
// 这个会报错,因为指定返回值类型是T,但是arg的类型是number
identity3<T>(arg: number): T {
        return arg
}

给某个函数固定返回类型格式

 let res: DataType = this.state.get<DataType>(INDEX_DATA, { list: [], total: 1 })
 
 interface DataType {
    list: Array<Object>,
    total: Number
}
阅读 687

推荐阅读
目录