Size: a a a

2020 July 15

D

Dmitry 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 и тс ругается
мб в корне не так сделал ?
я бы сделал гард
а соурс через семпл
забрал бы данные и в фильтр проверил
и это в таржет
источник

NT

Nikita Tkachuk in ☄️ effector
ща попробую )
источник

NT

Nikita Tkachuk in ☄️ effector
Dmitry
мб в корне не так сделал ?
я бы сделал гард
а соурс через семпл
забрал бы данные и в фильтр проверил
и это в таржет
спасибо, работает )
только чет не оч типобезопасно ) т.к. даже если фильтр всегда true возвращает то guard не ругается )

guard({
 source: sample({
   source: $editingMoveId,
   clock: editMove,
   fn: (moveId, payload) => ({ moveId, payload }),
 }),
 filter: () => true,
 target: editMoveFx,
});
источник

AO

Aleksandr Osipov in ☄️ effector
Nikita Tkachuk
спасибо, работает )
только чет не оч типобезопасно ) т.к. даже если фильтр всегда true возвращает то guard не ругается )

guard({
 source: sample({
   source: $editingMoveId,
   clock: editMove,
   fn: (moveId, payload) => ({ moveId, payload }),
 }),
 filter: () => true,
 target: editMoveFx,
});
А на что должен был бы ругаться гуард?
источник

NT

Nikita Tkachuk in ☄️ effector
editMoveFx все еще принимает moveId: number; а если filter всегда возвращает true то может быть и null
источник

VP

Van Pav in ☄️ effector
Nikita Tkachuk
спасибо, работает )
только чет не оч типобезопасно ) т.к. даже если фильтр всегда true возвращает то guard не ругается )

guard({
 source: sample({
   source: $editingMoveId,
   clock: editMove,
   fn: (moveId, payload) => ({ moveId, payload }),
 }),
 filter: () => true,
 target: editMoveFx,
});
filter: ({ modeId }) => moveId !== null
попробуй
источник

NT

Nikita Tkachuk in ☄️ effector
Van Pav
filter: ({ modeId }) => moveId !== null
попробуй
так и будет написано, в фильтре типа у параметра чет нет, походу нужно вручную указывать
источник

AO

Aleksandr Osipov in ☄️ effector
Вообще тут type guard может помочь кажется, но я не совсем въехал в кейс
источник

NT

Nikita Tkachuk in ☄️ effector
Aleksandr Osipov
Вообще тут type guard может помочь кажется, но я не совсем въехал в кейс
что значит type guard ?)
источник

AO

Aleksandr Osipov in ☄️ effector
Nikita Tkachuk
что значит type guard ?)
Я про is из тайпскипта
источник

AO

Aleksandr Osipov in ☄️ effector
Но опять же, я не совсем уверен что понял о чем речь
источник

NT

Nikita Tkachuk in ☄️ effector
Nikita Tkachuk
спасибо, работает )
только чет не оч типобезопасно ) т.к. даже если фильтр всегда true возвращает то guard не ругается )

guard({
 source: sample({
   source: $editingMoveId,
   clock: editMove,
   fn: (moveId, payload) => ({ moveId, payload }),
 }),
 filter: () => true,
 target: editMoveFx,
});
в этой записи у того что возвращает sample нет типа, его вручную нужно описывать?)
источник

AO

Aleksandr Osipov in ☄️ effector
Nikita Tkachuk
в этой записи у того что возвращает sample нет типа, его вручную нужно описывать?)
Доберусь до компа и попробую сообразить, сейчас с телефона нет возможности
источник

NT

Nikita Tkachuk in ☄️ effector
Aleksandr Osipov
Доберусь до компа и попробую сообразить, сейчас с телефона нет возможности
🙃
источник

AO

Aleksandr Osipov 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: ({modeId}): modeId is number
источник

NT

Nikita Tkachuk in ☄️ effector
какая-то херня
так тс ругается
guard({
 source: sample({
   source: $editingMoveId,
   clock: editMove,
   fn: (moveId, payload) => ({ moveId, payload }),
 }),
 filter: ({ moveId }) => moveId !== null,
 target: editMoveFx,
});


а так нет
const source = sample({
 source: $editingMoveId,
 clock: editMove,
 fn: (moveId, payload) => ({ moveId, payload }),
});

guard({
 source,
 filter: ({ moveId }) => moveId !== null,
 target: editMoveFx,
});
источник

NT

Nikita Tkachuk in ☄️ effector
просто вынес source в переменную
источник

AO

Aleksandr Osipov in ☄️ effector
с инлайном в тс беда
источник

NT

Nikita Tkachuk in ☄️ effector
((
источник

VP

Van Pav in ☄️ effector
Nikita Tkachuk
какая-то херня
так тс ругается
guard({
 source: sample({
   source: $editingMoveId,
   clock: editMove,
   fn: (moveId, payload) => ({ moveId, payload }),
 }),
 filter: ({ moveId }) => moveId !== null,
 target: editMoveFx,
});


а так нет
const source = sample({
 source: $editingMoveId,
 clock: editMove,
 fn: (moveId, payload) => ({ moveId, payload }),
});

guard({
 source,
 filter: ({ moveId }) => moveId !== null,
 target: editMoveFx,
});
Можно еще явно указать тип 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,
});
источник