Ошибка TS2365: оператор «+» не может быть применен к типам «число []» и «-1000»

-2

Я получаю следующую ошибку в моих журналах ng serve, хотя функция работает без проблем. Это станет проблемой, хотя, когда я собираюсь для производства. Как я могу исправить эту ошибку?

uuidv4() {
    return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
      (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
    )
  }

В моем сервисе я назвал это this.uuidv4() для генерации уникального идентификатора.

  • 2
    здесь [1e7]+-1e3 почему вы используете здесь скобку?
  • 3
    Что должен делать [1e7]+-1e3+-4e3+-8e3+-1e11 ? [1e7] - это массив, -1e3+... - это число, а затем вы вызываете replace которого нет в массивах или числах. Ты хотел, чтобы все это было струной?
Показать ещё 3 комментария
Теги:
angular

1 ответ

1

Хорошо, я понимаю, что он делает сейчас. Этот код [1e7]+-1e3+-4e3+-8e3+-1e11 использует преимущество приведения типа оператора сложения. Например, []+0 возвращает "0" а [1]-1 возвращает "1-1". Он работает в JavaScript, потому что, но TypeScript предупреждает вас об этом, потому что этот вид кода обычно является результатом опечатки или логической ошибки.

Таким образом, это выражение - всего лишь немного кода для "10000000-1000-4000-8000-100000000000". Просто замените это выражение значением результата в вашем коде следующим образом:

return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c =>
  (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
)
  • 0
    Работал как шарм. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню