函数泛型
//泛型 函数定义参数泛型
function getArr<T>(value: T,count:number) :T[]{
const arr:T[] = [];
for (let i = 0; i < count; i++) {
arr.push(value)
}
return arr
}
console.log(getArr(1233,4))
console.log(getArr("nihao",2))
//多个泛型参数 元组类型
function updateArr<T,U>(t:[T,U]):[U,T]{
//置换元素位置
return [t[1],t[0]]
}
console.log(updateArr(['1adf',1245]));
泛型约束
//泛型约束
interface ILength{
length:number
}
function getLength<T extends ILength>(x:T){
return x.length
}
//传入的类型要有length属性, string类型有这个属性
console.log(getLength('nihaog'))
//定义一个有length属性的对象
console.log(getLength({length:1234}))
接口泛型
//接口定义泛型
interface IPerson<T>{
name:T
}
let p1:IPerson<string> = {
//可以使用冒号(:)给匿名对象的属性赋值
name:"nihao"
}
//string
console.log(typeof p1.name)
//nihao
console.log(p1.name)
let p2:IPerson<number> = {
//可以使用冒号(:)给匿名对象的属性赋值
name:123
}
//number
console.log(typeof p2.name)
//123
console.log(p2.name)
创建匿名对象;可以使用冒号(:)给匿名对象的属性赋值
//创建匿名对象, 可以使用冒号(:)给匿名对象的属性赋值, 通常用于初始化对象字面量时指定属性的类型
const person = {name:'Alice'}
//Alice
console.log(person.name)
//string
console.log(typeof person.name)