Почему браузер понимает этот фрагмент, а мой компилятор машинописи - нет? - PullRequest
0 голосов
/ 01 ноября 2018

Я читал чужой код, когда наткнулся на этот фрагмент.

let array = Array(100)
   .fill()
   .map(_ => { 
       return Math.floor(Math.random() * 100 + 1)) 
   });

При реализации этого самостоятельно мой компилятор машинописного текста выдавал ошибку «ошибка TS2554: ожидалось 1-3 аргумента, но получено 0.», что имеет смысл. Для функции Array .fill () требуется хотя бы один параметр. При входе массива в консоль браузера я вижу, что 100 случайных чисел были сгенерированы и преобразованы в массив. Вот тут и начинается мое замешательство.

У меня есть некоторые мысли ... Я нацеливаюсь на es5 в моем tsconfig. Что имеет смысл для меня, так это то, что реализация .fill () изменилась в ES6, и браузер может понять код, потому что он не нарушает стандарты ES6, но компилятор машинописи проверяет соответствие ES5, где он нарушает стандарт.

1 Ответ

0 голосов
/ 01 ноября 2018

Просто явно передайте undefined вместо того, чтобы передавать его неявно:

  .fill(undefined)

Это не ошибка JavaScript, поскольку JS неявно передаст undefined, но один из TS, намекающий вам, что неявно переданные аргументы - плохая вещь для читабельности.


Кстати, единственный пользователь:

  const array = Array.from({ length: 100 }, () => Math.floor(Math.random() * 100 + 1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...