Size: a a a

2021 April 12

EO

Eugene Obrezkov in Frontend UA
сигнатура isArray

(method) ArrayConstructor.isArray(arg: any): arg is any[]

и при некоторых кейсах, TypeScript теряет ItemRecord в проверке и думает что это any[]
источник

EO

Eugene Obrezkov in Frontend UA
а, погодь, версия 4.2.3, не не, мы её откатывали на работе, у них там что-то сломалось сильно ну или breaking change
источник

EO

Eugene Obrezkov in Frontend UA
надо пробовать на 4.1.х
источник

DD

Dmytro Dovhan in Frontend UA
на 4.1.5 тоже самое
источник

DD

Dmytro Dovhan in Frontend UA
по ошибке ощущение что кондишенал не отрабатывает
Type 'null' is not assignable to type 'Value extends null ? null : Value extends ItemRecord ? number : number[]'

или может надо возвращаемый результат как то описать по другому
источник

EO

Eugene Obrezkov in Frontend UA
ну вообще странный тип, я не понимаю зачем проверять так
источник

EO

Eugene Obrezkov in Frontend UA
меня больше интересует, почему если убрать null из объединения и из проверки, то Array.isArray начинает возвращать any[] на value
источник

DD

Dmytro Dovhan in Frontend UA
принимаю идеи как сделать лучше )
для случае когда на вход может быть юнион, а на выход производные типы, я что то лучше варианта не придумал
источник

EO

Eugene Obrezkov in Frontend UA
я правильно понимаю, что у тебя функция принимает элемент или его массив из элементов и возвращает число или массив чисел?
источник

DD

Dmytro Dovhan in Frontend UA
да
источник

EO

Eugene Obrezkov in Frontend UA
интересная задачка, на самом деле
источник

EO

Eugene Obrezkov in Frontend UA
такое обычно делается через function overload, а не условные типы
источник

EO

Eugene Obrezkov in Frontend UA
у тебя есть разные сигнатуры функций, которые принимают разные параметры и возвращают разный результат
источник

DD

Dmytro Dovhan in Frontend UA
все время забываю про него
источник

EO

Eugene Obrezkov in Frontend UA
такую логику описывают через перегрузки функций
источник

EO

Eugene Obrezkov in Frontend UA
я попробовал натянуть сову на глобус, но у меня не получилось
источник

EO

Eugene Obrezkov in Frontend UA
из-за того, что одна и та же функция может вернуть как число, так и массив чисел
а известно будет что она вернёт, только когда ты в неё уже засунешь аргумент
источник

EO

Eugene Obrezkov in Frontend UA
источник

EO

Eugene Obrezkov in Frontend UA
результатом функции всё равно будет number | number[], как не крути
источник

EO

Eugene Obrezkov in Frontend UA
так что, перегрузка и вперёд
источник