Не удается найти имя «Многие» - Обновление до TypeScript 3.1.6 - PullRequest
0 голосов
/ 12 июня 2019

Я недавно обновил свой проект Angular с 6 до 7, и у меня возникла проблема с функцией orderBy, предоставляемой lodash (v4.7.11).

Ошибка при передаче строки в *Третий параметр 1004 *

Аргумент типа 'string' не может быть назначен параметру типа Many<boolean | "desc" | "asc">.

Моя переменная сортировки называется sortи я попытался объявить тип как sort: Many<boolean | "desc" | "asc">, а затем я получил ошибку

Не могу найти имя «Многие»

Как мне решить эту проблему?

Моя машинописная версия 3.1.6.

Ответы [ 3 ]

1 голос
/ 12 июня 2019

Некоторые ответы здесь являются фактами, но это не решило их для меня.Моя ситуация была немного хитрой.

Это точная строка кода, которую я использую

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

, где typcript выдает ошибку во время компиляции, как упоминалосьвыше.

Теперь я должен был упомянуть об этом в вопросе, что я не передаю непосредственно asc или desc, но выражение, которое оценивает один из них.

Я просто имелсделать следующее, чтобы заставить его работать

[(this.sort.dir || this.defaultSort.dir) === 'asc' ? 'asc' : 'desc']

или лучшую версию, как предложил Авин

(this.sort.dir || this.defaultSort.dir) as ('asc' | 'desc')

И, следовательно, чтобы интерпретатор понимал, что любое из значений может быть единственным возможным выходом.

Так что для любого, в основном для всех, кто собирается передавать строковую переменную, которая будет иметь любое из двух значенийможет следовать за этим маленьким взломом, чтобы заставить вещи работать.

0 голосов
/ 12 июня 2019

Я вижу такой пример документации и не вижу Много, о чем вы упоминаете?

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']);
0 голосов
/ 12 июня 2019

Тип Many ожидает массив значений , как следует из названия. Используйте [ "desc" ]

Редактировать: При дальнейшей проверке определений типов, Many допускает как массивы, так и отдельные значения. Many<T> = T | ReadOnlyArray<T> Рабочие примеры:

orderBy([ { name: 'john' }, { name: 'kate' }], [ 'name' ],  'asc')
orderBy([ { name: 'john' }, { name: 'kate' }], [ 'name' ],  [ 'asc' ])
...