视频位置 TypeScript快速梳理_下篇 0:54:50

泛型允许我们在定义函数、类或接⼝时,使⽤类型参数来表示未指定的类型,这些参数在具体使⽤时,才被指定具体的类型,泛型能让同⼀段代码适⽤于多种类型,同时仍然保持类型的安全性。

//<T> 表示 动态指定类型。  泛型用在函数身上,所以叫泛型函数。
// 泛型函数定义
function logData<T>(data: T): T {
    console.log(data)
    return data
}

//测试:
// 调用时具体化为:
//function logData(data: number): number  // T 被替换为 number
logData<number>(100)
//function logData(data: string): string  // T 被替换为 string
logData<string>('hello')

泛型可以有多个

//T|U 表示返回值是联合类型,可能是T,可能是U
function logData<T, U>(data1: T, data2: U): T | U {
    console.log(data1,data2)

    return Date.now() % 2 ? data1 : data2
}

//测试:
logData<number, string>(100, 'hello')
logData<string, boolean>('ok', false)

泛型接⼝

也就是写接口的时候,可以用泛型。

interface PersonInterface<T> {

    name: string,
    age: number,

    extraInfo: T
}

//测试:
let p : PersonIterface<string> = {
    name: 'tom',
    age: 18,
    extraInfo: '250' //string
}

let p1: PersonInterface<string>
let p2: PersonInterface<number>
p1 = { name: '张三', age: 18, extraInfo: '⼀个好⼈' }
p2 = { name: '李四', age: 18, extraInfo: 250 }