TS泛型。

 泛型的基本使用

export default {}
// 数组声明
const arr1: string[] = ["HTML", "CSS", "Javascript"];
const arr2: Array<string> = ["刘亦菲", "赵丽颖"];
const arr3: Array<number> = [1, 2, 3, 4, 5]

// 数组内容填充
let res = new Array(3).fill("刘亦菲");
console.log(res);

// 函数参数的数组填充(数组类型是number)
let getArray = (value: number, items: number): number[] => {
    return new Array(items).fill(value);
}
let res1 = getArray(10, 5);
console.log(res1);

// 函数参数的数组填充(数组类型是any)
let getArray2 = (value: any, items: number): any[] => {
    return new Array(items).fill(value);
}
let res2 = getArray2("刘亦菲", 10);
let res3 = getArray2(5, 10);

// 函数参数的数组填充(数组类型自定义)
let getArray3 = <T>(value: T, items: number): T[] => {
    return new Array(items).fill(value);
}
let res4 = getArray3<string>("刘亦菲", 10);
console.log(res4);

 泛型类

export default {}
class Person<T1, T2>{
    name: T1
    age: T2
    sex: T1
    constructor(name: T1, age: T2, sex: T1) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
}
let p = new Person<string, number>("刘亦菲", 18, "女");
console.log(p);

泛型约束

 

export default {}


// function getLength<T>(arr:T):T{
//     console.log(arr.length);
//      return arr
// }

// function getLength<T>(arr:Array<T>):Array<T>{
//     console.log(arr.length);
//      return arr
// }

// getLength([1,2,3,4])
// getLength(["刘亦菲","赵丽颖"])
// getLength(["刘亦菲"])

interface ILength {
    length: number
}

function getLength<T extends ILength>(arr: T): number {
    return Array.length
}

getLength([1, 2, 3, 4])
getLength(["刘亦菲", "赵丽颖"])
getLength(["刘亦菲"])

泛型接口 

export default {}

// interface IPerson<T1,T2>{
//     name:T1
//     sex:T2
// }

// let p:IPerson<string,string>={
//     name:"李易峰",
//     sex:"男"
// }

interface IPerson<T1 = string, T2 = number> {
    name: T1
    sex: T2
}

let p: IPerson = {
    name: "刘亦菲",
    sex: 0
}
console.log(p);

条件约束

export default {}
//复习三元运算xxx==yy?a:b
let score = 60;
let res = ""
if (score >= 60) {
    res = "及格"
}
else {
    res = "不及格"
}

interface IName {
    name: string
}
interface IAge {
    age: number
}
//条件类型
type Condition<T> = T extends string ? IName : IAge


function reLoad<T extends number | string>(dorName: T): Condition<T> {
    throw ""
}
let res1 = reLoad("王丽坤")
let res2 = reLoad(100)
console.log(res);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值