TypeScript(十八)泛型约束

319 阅读1分钟

一、泛型约束的应用场景

首先我们来看一段代码

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继承这个接口,从而实现了对传入参数的约束。