ts泛型的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/themagickeyjianan/article/details/87897556
/**
 * <T> 泛型是一种任意类型,类型是安全的;
 * any存在装箱和拆箱操作,不是类型安全的;
 * T叫做占位符;
 * 泛型是在实例化使用阶段才初始化;
 * 泛型一般用于批量操作;
 */

/**
 * 函数添加泛型接口
 */
function demo<T> (args: T): T{
    return args;
}

function test(n: string): boolean {
    return true;
}

function test1(n: number): string {
    return "";
}

// any会进行装箱和拆箱,耗时; 存在转化类型安全问题
function test3(n: any): any {
    return n;
}

// 泛型 优点:不存在装箱和拆箱; 类型也是安全的
function test5<T>(n: T): T {
    return n;
}

test5<number>(1); // 传入的数值如果为string则会报错,因此泛型是类型安全的

/**
 * 类
 */
class Person2<T>{

}

class UserInfo {
    name: string = "";
    age: number = -1;
}

let a2 = new Person2<UserInfo>();

/**
 * 给类添加泛型接口
 */
interface School<T> {
    add(n: T): boolean;
}

class Student2 implements School<UserInfo>{
    add(n: UserInfo): boolean {
        return false;
    }
}

/**
 * 后台调用不同的接口处理数据; 用ts泛型实现数据访问层的封装; ts对类、数组、函数等都可以进行约束,使用更加广泛
 *   1.mysql
 *   2.sqlserver
 */

// T
interface IData<T> {
    Add(info: T): boolean;
    Delete(info: T): boolean;
    Update(info: T): T;
    Search(info: T, id: number): T;
}

// 对mysql访问
class MysqlData<T> implements IData<T>{
    Add(info: T): boolean {
        return false;
    }

    Delete(info: T): boolean {
        return false;
    }

    Search(info: T, id: number): T {
        // @ts-ignore
        return info;
    }

    Update(info: T): T {
        // @ts-ignore
        return undefined;
    }

}

// 对mssql访问
class MssqlData<T> implements IData<T>{
    Add(info: T): boolean {
        return false;
    }

    Delete(info: T): boolean {
        return false;
    }

    Update(info: T): T {
        // @ts-ignore
        return undefined;
    }

    Search(info: T, id: number): T {
        return info;
    }
}

//
class UserInfo2 {
    name: string = "";
    age: number = -1;
}

//
class UserData extends MysqlData<UserInfo2>{
    public GetUserInfo(n: number): UserInfo2 {
        let info = new UserInfo2();
        info.name = "jianan";
        info.age = 26;

        return this.Search(info, n);
    }
}

let ud = new UserData();
console.log(ud.GetUserInfo(1));

猜你喜欢

转载自blog.csdn.net/themagickeyjianan/article/details/87897556