我最近将Angular项目从6升级到了7,并且lodash(v4.7.11)提供的orderBy
函数遇到了问题。
我将字符串传递给orderBy
的第三个参数时的错误是
类型'string'的参数不能分配给类型
Many<boolean | "desc" | "asc">
的参数。
我的排序变量名为sort
,我尝试将其类型声明为sort: Many<boolean | "desc" | "asc">
,然后出现错误消息
找不到名称“很多”
我该如何解决?
我的打字稿版本是3.1.6。
答案 0 :(得分:1)
这里的一些答案是事实,但这并不能解决我的问题。我的情况有点棘手。
这是我正在使用的确切代码行
this.actions = _orderBy(this.actions, columnName, (this.sort.dir || this.defaultSort.dir))
其中,如上所述,打字稿在编译期间会引发错误。
现在,我应该在问题中提到这一点,我不是直接传递asc
或desc
而是一个表达式,其结果为其中之一。
我只需要执行以下操作即可使其工作
[(this.sort.dir || this.defaultSort.dir) === 'asc' ? 'asc' : 'desc']
或Avin建议的更好版本
(this.sort.dir || this.defaultSort.dir) as ('asc' | 'desc')
因此,使解释器理解这两个值都是唯一可能的输出。
因此,对于任何人(大多数人)来说,只要传递一个将具有两个值之一的字符串变量,就可以跟随这个小技巧,使事情正常进行。
答案 1 :(得分:0)
顾名思义,Many
类型期望array of values。使用[ "desc" ]
编辑:在进一步检查类型定义时,Many
允许同时使用数组和单个值。 Many<T> = T | ReadOnlyArray<T>
工作示例:
orderBy([ { name: 'john' }, { name: 'kate' }], [ 'name' ], 'asc')
orderBy([ { name: 'john' }, { name: 'kate' }], [ 'name' ], [ 'asc' ])
答案 2 :(得分:0)
我在那里看到类似这样的文档示例,却看不到您提到的很多内容?
var users = [
{ 'user': 'fred', 'age': 48 },
{ 'user': 'barney', 'age': 34 },
{ 'user': 'fred', 'age': 40 },
{ 'user': 'barney', 'age': 36 }
];
// Sort by `user` in ascending order and by `age` in descending order.
_.orderBy(users, ['user', 'age'], ['asc', 'desc']);
// => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
也许您可以使用
_.orderBy(users, ['user', 'age'], ['asc']);