我在输入数组方法时遇到问题
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 做了数百个这样的操作,我是否必须在打字稿中定义该方法正在处理的元素?
答案 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)