typescript泛型

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

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

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

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

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

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

 let res: DataType = this.state.get(INDEX_DATA, { list: [], total: 1 })
 
 interface DataType {
    list: Array,
    total: Number
} 

                            
                        
                    
                    
                    

你可能感兴趣的:(typescript,泛型)