查看此代码:
class Customer {
id: string;
name: string;
}
private customers = [
{ id: '1234', name: 'Foo'},
{ id: '3241', name: 'Bar'}
]
getCustomers(): Customer[] {
return this.customers.sort((a,b) => {
return a[name] < b[name];
});
}
你会注意到getCustomers()
返回一个布尔,这是不允许的,因为它被用作期望数字的比较函数 。
上面的代码会返回错误:Type 'boolean' is not assignable to type 'number'.
MDN documentation
但是,此代码段:https://plnkr.co/DITVzCSqHHB1uNrTxFit/ 来自Angular教程并且工作正常。 Plunker与其他IDE中使用的打字稿或javascript有什么不同吗? (我使用VSCode和Angular CLI)
答案 0 :(得分:1)
该错误与Angular无关。您滥用了array.sort()
javascript方法。
array.sort()
返回一个数组,其中的compareFunction返回number
。
比较功能需要以下内容:
1 - a > b
0 - a == b
-1 - a < b
因此,您需要修改代码以使用预期的compareFunction结果:
getCustomers(): Customer[] {
return this.customers.sort((a,b) => {
if (a[name] > b[name]) return 1;
else if (a[name] == b[name] return -1;
else return 0;
});
}
详细了解array.sort()&amp;示例:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
答案 1 :(得分:0)
这是因为比较运算符返回 true 或 false 作为值。
您可以通过检查 typeof 操作的结果来轻松测试。
let x = 'a' < 'b';
console.log(typeof x);
你需要一些返回1,0或-1的东西。
String.localeCompare 通常可以解决问题。
const strings = ['a', 'b', 'c']
strings.sort((a, b) => {
return a.localeCompare(b);
})