Size: a a a

2020 July 15

NT

Nikita Tkachuk in ☄️ effector
Van Pav
Можно еще явно указать тип source у guard:

const $move = createStore<number | null>(null);
const moveEdited = createEvent<string>();
const editMoveFx = createEffect<
 { moveId: number; payload: string },
 any,
 any
>();

guard<{ moveId: number | null; payload: string }>({
 source: sample({
   source: $move,
   clock: moveEdited,
   fn: (moveId, payload) => ({ moveId, payload }),
 }),
 filter: ({ moveId }) => moveId !== null,
 target: editMoveFx,
});
хотел этого избежать, и не сразу понял как это сделать, спасибо за пример )
источник

AO

Aleksandr Osipov in ☄️ effector
источник

AO

Aleksandr Osipov in ☄️ effector
Вот там тип правильно у гварда выводтся, надо is добавить
источник

AO

Aleksandr Osipov in ☄️ effector
источник

AO

Aleksandr Osipov in ☄️ effector
если type assertion не указать то у clock будет number | null понятно дело
источник

NT

Nikita Tkachuk in ☄️ effector
хм, вроде то что нужно, спасибо )
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Nikita Tkachuk
хлопцы, помогите плиз )

sample({
 clock: guard({ source: $editingMoveId, filter: (moveId) => moveId !== null }),
 source: editMove,
 fn: (payload, moveId) => ({ moveId, payload }),
 target: editMoveFx,
});


у $editingMoveId тип number | null
а в editMoveFx у moveId тип number, и я фильтрую, чтобы editMoveFx не вызывался когда moveId === null, но guard всёравно возвращает тип number | null и тс ругается
filter: Boolean
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
источник

AO

Aleksandr Osipov in ☄️ effector
О прикольно, как-то пропустил это
источник

DS

Dmitriy Shuleshov in ☄️ effector
Aleksandr Osipov
О прикольно, как-то пропустил это
А можешь для бомжей пояснить?)
источник

AO

Aleksandr Osipov in ☄️ effector
Dmitriy Shuleshov
А можешь для бомжей пояснить?)
Да вроде все понятно
источник

AO

Aleksandr Osipov in ☄️ effector
тред чуть выше глянь
источник

AO

Aleksandr Osipov in ☄️ effector
guard защищает как бы, от того что не проходит по условию в filter, и должен запускать таргет если он указан (или создавать событие если нет) только в случае если значение переданное в filter не null/undefined
источник

AO

Aleksandr Osipov in ☄️ effector
вроде фигню написал, хз как выразить понятнее :)
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Dmitriy Shuleshov
А можешь для бомжей пояснить?)
Boolean это функция которая любое truthy значение конвертирует в true а falsy в false, соответственно если добавить в типы эффектора тот факт, что при передаче этого Boolean в filter любое nullable значение становится non-nullable то можно выводить тип не прибегая к редкому ts-синтаксису
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Dmitriy Shuleshov
А можешь для бомжей пояснить?)
источник

DS

Dmitriy Shuleshov in ☄️ effector
А как до этого нужно было извернуться что типы сошлись?
источник

AO

Aleksandr Osipov in ☄️ effector
Dmitriy Shuleshov
А как до этого нужно было извернуться что типы сошлись?
type assertion
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Dmitriy Shuleshov
А как до этого нужно было извернуться что типы сошлись?
filter: (value): value is User => value !== null
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
я считаю такую запись оправданной когда нужно сделать вывод типа из union, но уж null то отсеять можно как-то попроще)
источник