泛型的基本使用
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);