typescript 阅读嵌套函数中泛型类型的属性

2w2cym1i  于 2022-11-18  发布在  TypeScript
关注(0)|答案(1)|浏览(109)

我需要创建一个泛型helper方法,它

  • 我可以接受任何对象的数组,但至少它应该有id
  • 返回新对象数组,其中每个对象都具有isActive属性

这是我代码

export const useActionLinks = <T,>(
  data: T & { id: string }[]
) => {
  let active = '';

  function mapper(d: T) {
    return {
      ...d,
      isActive: d.id === active, // Error id does not exist on type T
    };
  }
  const itemsData = data.map(mapper); // Error
  console.log(itemsData);
};

但是ts在两个点上抱怨,一个是在函数Map器上,第二个是在data.map调用上。

g6ll5ycj

g6ll5ycj1#

它可以在对类型进行一些更改的情况下工作。

export const useActionLinks = <T extends {id: string}>(
  data: T[]
) => {
  let active = '';

  function mapper(d: T) {
    return {
      ...d,
      isActive: d.id === active, // Error id does not exist on type T
    };
  }
  const itemsData = data.map(mapper); // Error
  console.log(itemsData);
  return itemsData
};

useActionLinks([
    {a:1, id:"s"}, {b:2, id:'p'}
])

第一个修改是在第一行。我修改了泛型,用id扩展了基对象。这将修复两个错误。你不需要显式地提到返回类型,因为它被自动推断为(T & { isActive: boolean; })[]

相关问题