Комментарии 6
<code lang="Typescript">const parsed = map(['1', '2', '3'], (n) => parseInt(n))</code>
здесь вместо лямбды можно было бы использовать ссылку на функцию parseInt, для примера было бы лучше использовать какую-нибудь функцию из 2 аргументов или подобного, например (n) => parseInt("1" + n + "00"))
Использовать ссылку на parseInt нельзя, классическая ошибка новичка в JS ведь:
['1', '2', '3'].map(parseInt) // [ 1, NaN, NaN ]
Чтобы приводить строки в числам — я использую "Number":
['1', '2', '3'].map(Number) // [ 1, 2, 3 ]
Нельзя здесь использовать ссылку на parseInt, это классические грабли.
Фокус в том, что Array.prototype.map
передаёт в колбек дополнительные опциональные параметры, и parseInt
тоже может принимать дополнительные опциональные параметры — вот только эти параметры друг другу совершенно не соответствуют.
Напишите в консоли браузера ['10','10','10','10','10','10','10'].map(parseInt)
если не верите.
new this.constructor()
При наследовании бывает полезно. А ведь можно было бы сделать что-нибудь такое:
constructor: { new (...args): this; }
А зачем делать у ф-ии тип возвращаемого значения unknown?
Потом же результат работы такой ф-ии TS не даст использовать, разве нет?
Контекстуальная типизация (contextual typing), основанная на
void
, не запрещает функции что-либо возвращать.
А если почти везде стрелочные ф-ии вместо function someName() {}
как указать, что они void? Переписывать всё на const myFunc = function(): void {}
?
Карманная книга по TypeScript. Часть 4. Подробнее о функциях