【发布时间】:2020-09-28 02:57:40
【问题描述】:
我是 TypeScript 的新手。我可能会问一个菜鸟问题。我有以下对象数组。我想按年龄或姓名对其进行排序。这个问题之前有人问过。我在阅读this answer.And this 后尝试关注。我无法在 TypeScript 中编译它。
sortData2() {
const testData: object[] = [
{
name: 'name 1',
age: 20,
sex: 'M',
height: 7.5
},
{
name: 'name 1',
age: 10,
sex: 'M',
height: 6.5
},
{
name: 'name 3',
age: 30,
sex: 'F',
height: 4.5
}
];
testData.sort( (a, b) => {
return compare(a, b);
});
function compare(a: number | string | object, b: number | string | object) {
// compiler error Property 'age' does not exist on type 'string | number | object'.
return (a.age < b.age ? -1 : 1);
}
console.log(testData);
}
如何排序?提前致谢!
【问题讨论】:
-
是否有理由将 compare 声明为函数而不是 inline 定义它?您还应该删除
object[]类型:打字稿会推断出更好的东西 -
a和b不会是number | string | object只有object。即便如此,你最好为你的对象定义一个接口,这样你就可以更准确地进行类型检查。 -
实际上,我从另一个函数调用中得到了一个对象数组。我无法更改第 3 方 API 调用。所以我无法定义自己的任何接口。
-
你不能写
interface Person {name: string, age: number, sex: 'F' | 'M, height: number }? -
我试图通过这个简单的人像界面来模拟我的真实代码和问题。我的真实代码远比这个简单的界面复杂。
标签: arrays typescript object