Size: a a a

2021 March 11

Вт

Ві тя in Frontend UA
Alexey Raspopov
говно дизайн значит
приму к сведению (будто ето что то изменит)
источник

Вт

Ві тя in Frontend UA
пойду исправлять компилятор
источник

DD

Dmytro Dovhan in Frontend UA
export default function sumBy<T extends Record<K, number>, K extends keyof T>(

а может кто объяснить как это работает или где почитать про области видимости для дженериков?

до вчера я ожидал что дженерик нельзя использовать до того как он объявлен, плюс тут вроде выходит циклическая зависимость
источник

EO

Eugene Obrezkov in Frontend UA
Dmytro Dovhan
export default function sumBy<T extends Record<K, number>, K extends keyof T>(

а может кто объяснить как это работает или где почитать про области видимости для дженериков?

до вчера я ожидал что дженерик нельзя использовать до того как он объявлен, плюс тут вроде выходит циклическая зависимость
предположу что у них ленивое вычисление
источник

EO

Eugene Obrezkov in Frontend UA
или несколько проходов, скорее это
источник

EO

Eugene Obrezkov in Frontend UA
сначала проход, чтобы задекларировать идентификаторы, потом проход чтобы их вычислить
источник

EO

Eugene Obrezkov in Frontend UA
с использованием К до того, как он (визуально) объявился понятно - несколько проходов или ленивость
источник

EO

Eugene Obrezkov in Frontend UA
но где тут рекурсия?
источник

DD

Dmytro Dovhan in Frontend UA
Eugene Obrezkov
но где тут рекурсия?
K зависит от T, T завист от K
источник

EO

Eugene Obrezkov in Frontend UA
Dmytro Dovhan
K зависит от T, T завист от K
да, но это решается вычислением К, перед Т
источник

EO

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

EO

Eugene Obrezkov in Frontend UA
даже не так, сначала keyof T, получаем объединение ключей, проверяем что они ложатся на К, проверяем что Т это объект с этими ключами
источник

DD

Dmytro Dovhan in Frontend UA
Eugene Obrezkov
даже не так, сначала keyof T, получаем объединение ключей, проверяем что они ложатся на К, проверяем что Т это объект с этими ключами
и тут я поломался
видимо не хватает знаний о том как компиляторы работают

в мою ментальную модель не укладывается как можно получить ключи от объекта который строится на основе этих ключей )
источник

EO

Eugene Obrezkov in Frontend UA
Dmytro Dovhan
и тут я поломался
видимо не хватает знаний о том как компиляторы работают

в мою ментальную модель не укладывается как можно получить ключи от объекта который строится на основе этих ключей )
несколько проходов же)
источник

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
и каждый проход отвечает за свою конкретную часть, у каждого прохода есть своя задача, которую он решает
источник

EO

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