一、泛型约束的应用场景
首先我们来看一段代码
function fn<T>(arg: T): T{
console.log(arg.length); //编辑器报错
return arg;
}
fn("abc")
上面的代码中我们声明了一个泛型函数并且进行了调用,但是编辑器会报错,原因是当我们调用函数时没法去确定传入参数的类型,比如传入一个number类型或者boolean类型的值,都是不具备length属性的,这时我们就要用到泛型约束,对传入的值进行校验,可以使用interface + extends来实现约束。
二、泛型约束的使用
我们将上面的代码进行改造
interface Len {
length: number
}
function fn<T extends Len>(arg: T): T {
console.log(arg.length)
return arg;
}
fn("abc"); //正常
fn(666); //报错
我们先定义一个接口名为Len,其中要有length属性且类型是number,在泛型函数名称后使用extends继承这个接口,从而实现了对传入参数的约束。