泛型

63 阅读1分钟

调用泛型函数

function A<Type>(value: Type): Type {
  return value;
}

const a = A<number>(10);

泛型约束

function A<Type>(value: Type): Type {
  console.log(value.length);

  return value;
}

const a = A<number>(10);

上面value.length会报错,因为Type指定任意类型,如果传入number类型,它没有length属性,所以需要对泛型进行约束

1.指定具体的类型

function A<Type>(value: Type[]): Type[] {
  console.log(value.length);

  return value;
}

const a = A<number>([1, 2]);

2.添加约束:extends这里不是继承,是表示传入的类型必须要有length属性

interface Ilength {
  length: number;
}
function A<Type extends Ilength>(value: Type): Type {
  console.log(value.length);

  return value;
}

const a = A([1, 2]);

3.使用keyof


function A<Type, key extends keyof Type>(obj: Type, key: key) {
  return obj[key];
}

A({ a: 1 }, "a");