找不到名称“很多”-升级到TypeScript 3.1.6

时间:2019-06-12 06:09:26

标签: angular typescript lodash typescript3.0

我最近将Angular项目从6升级到了7,并且lodash(v4.7.11)提供的orderBy函数遇到了问题。

我将字符串传递给orderBy的第三个参数时的错误是

  

类型'string'的参数不能分配给类型Many<boolean | "desc" | "asc">的参数。

我的排序变量名为sort,我尝试将其类型声明为sort: Many<boolean | "desc" | "asc">,然后出现错误消息

  

找不到名称“很多”

我该如何解决?

我的打字稿版本是3.1.6。

3 个答案:

答案 0 :(得分:1)

这里的一些答案是事实,但这并不能解决我的问题。我的情况有点棘手。

这是我正在使用的确切代码行

this.actions = _orderBy(this.actions, columnName, (this.sort.dir || this.defaultSort.dir))

其中,如上所述,打字稿在编译期间会引发错误。

现在,我应该在问题中提到这一点,我不是直接传递ascdesc而是一个表达式,其结果为其中之一。

我只需要执行以下操作即可使其工作

[(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']);