打字稿 - 键入数组方法

时间:2021-05-13 12:17:25

标签: javascript arrays typescript filter

我在输入数组方法时遇到问题

 const person = students.findIndex((student) => student.id === 23)

我得到的第一个错误是括号中的学生元素

 const person = students.findIndex((student) => student.id === 23)

TS7006:参数“student”隐式具有“any”类型。

这可以通过以下方式修复

 const person = students.findIndex((student:any) => student.id === 23)

这不是很好所以我尝试

 const person = students.findIndex((student:Object) => student.id === 23)

但我明白

TS2339:“对象”类型上不存在属性“id”

我假设是因为 Object 是一个泛型类型。

这里的最佳实践是什么?我使用 filter、map、reduce 做了数百个这样的操作,我是否必须在打字稿中定义该方法正在处理的元素?

2 个答案:

答案 0 :(得分:1)

最好使用 TypeScript 的隐式类型。

创建类型

type Student = {
  name: string;
};

const students: Student[] = [
  { name: 'ABC' },
  { name: 'DEF' }
];

const person = students.findIndex( student => student.name === 'ABC' ); // 0

当您将 students 变量声明为 Student 类型的数组时,您的数组原型将扩展自身以包含 Student 类型。因此,只要您在学生数组上调用这些方法,您的数组原型方法就会将 Student 视为它们的类型。

答案 1 :(得分:1)

创建 Student 接口并提供相同的代替 Object 和任何其他位置进行类型检查。即使 TS 可以进行隐式类型检查,我也建议明确提及类型(良好的编码习惯)。

interface Student {
  id: number;
  name: string;
  // other properties...
}

const students: Student[] = [{
  id: 123,
  name: "test123"
},
{
  id: 456,
  name: "test456"
}]; // Suppose this is the data example

const person = students.findIndex((student: Student) => student.id === 23)