Size: a a a

JavaScript.Ninja

2021 April 22

G

Godfather in JavaScript.Ninja
И я тоже! Надеюсь, закрою этот большой пробел в знаниях, а то я, как фронтенд, вообще с деплоем, серверами и вот этим вот всем не соприкасался.
источник

YS

Yuri Strelets in JavaScript.Ninja
предполагается что в foo будет передана функция, которая может быть вызвана с неким типом, когда в foo, с более широким типом колбека, передается callback2 у которого более узкий тип то тс и ругается

попробуй сделать через дженерик
источник

YS

Yuri Strelets in JavaScript.Ninja
или оверрайды, зависит от задачи
источник

МА

Максим Ахмеров... in JavaScript.Ninja
мне кажется это же норм как раз, что 'когда в foo, с более широким типом колбека, передается callback2 у которого более узкий тип то тс и ругается', по логике не должен ругаться, когда мы заужаем тип
источник

YS

Yuri Strelets in JavaScript.Ninja
ну если бы в foo была не функция аргументом, то будет ок, а тут предполагается функция, для которой описан более широкий тип аргументов (т.е. с которыми она может быть вызвана в будущем), но дальше передается функция которая ждет более узкий тип аргументов
источник

IK

Illya Klymov in JavaScript.Ninja
Тип где id строго string более узкий
источник

МА

Максим Ахмеров... in JavaScript.Ninja
все равно не понимаю, мы можем передать более узкий тип аргументов, это же хорошо, тк мы знаем эти типы, с которыми будет вызвана функция, вот если бы мы вызывали с широким типом, то была бы ошибка, что логично, тк к нам могут попасть незнакомые типы, но мы же занижаем
источник

IK

Illya Klymov in JavaScript.Ninja
Функция foo ожидает что она может вызвать колбек с типом у которого нет id, но переданный колбек этого не позволяет
источник

YS

Yuri Strelets in JavaScript.Ninja
я хз как объяснить ))) но тут как раз получается что для коллбека в фу описан более широйкий тип для дата, хотя коллбек2 ждет более узкий тип дата
источник

МА

Максим Ахмеров... in JavaScript.Ninja
Функция foo ожидает что она может вызвать колбек с типом у которого  либо есть ид, либо нет, но приходящая функция со строгим ид как раз подходит под это множество
источник

YS

Yuri Strelets in JavaScript.Ninja
нет
источник

YS

Yuri Strelets in JavaScript.Ninja
получается что в фу можно вызвать приходящий коллбек либо с текстом, либо с текстом и айди, но коллбек2 этого не позваляет, он обязательно ждет айди
источник

YS

Yuri Strelets in JavaScript.Ninja
т.е. получается более широкий тип в фуу (где может айди быть андефайнед) приводится к более узкому в коллбек2 (где айди айндефайнедом не может быть)
источник

МА

Максим Ахмеров... in JavaScript.Ninja
но мы же пробрасываем callback в foo, соотвественно cb должен приводиться к типу foo, соотвественно пробрасываем более узкий к более широкому
источник

YS

Yuri Strelets in JavaScript.Ninja
да, когда колбек2 передается в фу, то тип дата колбека2 приводится как узкий к широкому, и тут все ок, а дальше получается наоборот, т.к. cb это функция, предполагается что ее можно вызвать, коллбек2 имеет более узкий тип, и получается приведение широкого к узкому
источник

AI

Arthur Irgashev in JavaScript.Ninja
потому что с unknown это работает иначе, unknown фактически говорит, что тип неизвестен
источник

AI

Arthur Irgashev in JavaScript.Ninja
а в примерах выше ты задаёшь определённый рестрикт для типов
источник

МА

Максим Ахмеров... in JavaScript.Ninja
а где происходит второе приведение типов широкого к узкому?
источник

IK

Illya Klymov in JavaScript.Ninja
Нет, вы путаете ко и контрвариантность
источник

МА

Максим Ахмеров... in JavaScript.Ninja
тут я хотел показать, как раз использование узкого типа в широком, что все норм
источник