说明
在我们之前的定义泛型的时候可以给它传递任何类型的泛型,但是在开发中我们需要在固定的类型中选择一个传递,传递其他的则无效,像这样约束泛型该怎么写呢
interface Product {
title: string
price: number
}
// 继承上面的属性, 然后在添加自己独有的属性
interface Tshirt extends product {
size: 'S' | 'L' | 'M'
}
// 这里如果是传递的 Product 的子类的话就会验证成功,否则的话就会验证失败
function displayTitle<T extends Product>(t: T) {
console.log(t.title)
}
let product: Product = {
title: '牛仔裤',
price: 100
}
displayTitle<Product>(product) // ok
displauTitle<string>(product) // 不满足泛型约束,因为上面写的是 Product 的子类才可以通过验证
let tshirt: Tshirt = {
title: '牛仔裤',
price: 100,
size: 'M'
}
displayTitle<Tshirt>(tshirt) // 这样也是 ok 的因为 Tshirt 是 Product 的子类
说明
使用了泛型约束以后,就可以指定一组泛型当中的泛型了