Size: a a a

2020 October 15

NT

Nikita Tkachuk in ☄️ effector
это однозначно лучше, и я бы юзал этот метод, если не получится полностью выводить типы из apiCall )
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
они выводятся из apiCall) просто нужно передать тогда эту функцию в дженерик
источник

ф

фильтруй мысли... in ☄️ effector
Nikita Tkachuk
@ZeroBias а можно в типах createEffect заменить Promise на какой нибудь кастомный тип вроде Failable<Done, SomeError>, чтобы тс выводил не только resolve тип, но и reject ?

вместо
createEffect<Params, Done, Fail = Error>(
   name?: string,
   config?: {
     handler?: (params: Params) => Promise<Done> | Done
     sid?: string
   },
 ): Effect<Params, Done, Fail>

писать

createEffect<Params, Done, Fail = Error>(
   name?: string,
   config?: {
     handler?: (params: Params) => Failable<Done, Fail> | Done
     sid?: string
   },
 ): Effect<Params, Done, Fail>

на проекте нужно обрабатывать ошибки аксиоса, а они в формате AxiosError<{ errors?: Error[] }>

а из-за того что Fail последним параметром, нужно теперь указывать и Params и Done, хотя они сами выводятся

https://www.typescriptlang.org/play?ssl=1&ssc=17&pln=1&pc=28#code/JYWwDg9gTgLgBAQwB7AgZwDRwN5wIIroCiUU0cAvnAGZkhwDkyqaDA3ALABQoksOcAMZQApghgii1aiMHwqtCPQYjpsmNAbdugiADs08BGGABhBABsLcALxwAFMAAmALjh6AriABGIqAEo3AAU6YDQRAB5DKGA9AHMAPlsk5nQAOjiRGHsAAxEkBHALEQB6ABJsZwoc-04uHX1DRBNzKwAxJFshUXFJNTl7YzNLC38Gg3gYuIALGAAVAE8wESc8FpGOruExCSkZOQjPHz8saNi4rAIWEjIoBMH1q38gA
ts не может вывести тип ошибки из Failable, получается unknown
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
фильтруй мысли
ts не может вывести тип ошибки из Failable, получается unknown
по ссылке предложение сделать обёртку для вывода типа, но с эффектором желательно обёрток избежать
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
то есть с обёртками так то можно и сам createEffect обернуть, но лучше один раз нормально решить, как необходимо работать с описанием типа ошибки эффекта
источник

ф

фильтруй мысли... in ☄️ effector
🚀🔬 🚀🔬🚀🔬
по ссылке предложение сделать обёртку для вывода типа, но с эффектором желательно обёрток избежать
я видел, лезть в рантайм ради вывода типов - это уже край
источник

D

Danila in ☄️ effector
Привет! Как правильно сделать вычисляемое поле в сторе, зависимое от других полей в том же сторе?
источник

ф

фильтруй мысли... in ☄️ effector
🚀🔬 🚀🔬🚀🔬
так, короче по ходу удалось реализовать такой вариант:

const apiCallFx = createEffect<typeof apiCall, AxiosError>(apiCall)
выглядит как вариант... а другие оверлоады не сломаются от двух аргументов?
источник

NT

Nikita Tkachuk in ☄️ effector
🚀🔬 🚀🔬🚀🔬
по ссылке предложение сделать обёртку для вывода типа, но с эффектором желательно обёрток избежать
была идея так сделать, и впринципе тогда эффект норм обрабатывает и Failable и Promise, но блэт, оказывается нельзя инфером вывести второй параметр дженерика

https://github.com/Microsoft/TypeScript/issues/29595
источник

ф

фильтруй мысли... in ☄️ effector
Danila
Привет! Как правильно сделать вычисляемое поле в сторе, зависимое от других полей в том же сторе?
Telegram
ɔuʎsɐop in ☄️ effector
***
Если вы собираетесь хранить в сторе объект и изменять какие-то его части, то скорее всего вам нужно декомпозировать такой объект. Вынесите те части, которые планируете изменять, в отдельные сторы, чтобы работать с ними атомарно:


// BAD
const $profile = createStore({
 name: 'Joe',
 isLogged: true,
 account: {
   balance: 99,
   permissions: [],
 },
})

// GOOD
const $name = createStore('');
const $isLogged = createStore(false);
const $balance = createStore(0);
const $permissions = createStore([]);


Атомарные сторы проще изменять, объединять и вычислять из них производные данные. За счёт декомпозиции и создания вычисляемых сторов устраняется избыточность и происходит нормализация данных. Пропадает необходимость в мемоизации селекторов, благодаря наличию индивидуальных подписок. Такой подход позволяет произвести оптимизации и повысить эффективность выполнения.  

Создавать много сторов и управлять каждым из них по отдельности лучше, чем хранить всё в одном месте и иметь сложную логику обновления данных.…
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Danila
Привет! Как правильно сделать вычисляемое поле в сторе, зависимое от других полей в том же сторе?
это отдельный стор тогда

const nameLength = user.map(user => user.name.length)


если нужны дальше все значения, то можно совместить всё обратно через combine

const result = combine(user, nameLength, ({name}, length) => ({name, length}))
источник

D

Danila in ☄️ effector
🚀🔬 🚀🔬🚀🔬
это отдельный стор тогда

const nameLength = user.map(user => user.name.length)


если нужны дальше все значения, то можно совместить всё обратно через combine

const result = combine(user, nameLength, ({name}, length) => ({name, length}))
Да, понял, спасибо!
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
фильтруй мысли
выглядит как вариант... а другие оверлоады не сломаются от двух аргументов?
как ни странно нет, не сломались 🤔 мне даже пришлось накинуть дополнительных тестов, чтобы убедиться что реально всё работает)
источник

ф

фильтруй мысли... in ☄️ effector
Nikita Tkachuk
была идея так сделать, и впринципе тогда эффект норм обрабатывает и Failable и Promise, но блэт, оказывается нельзя инфером вывести второй параметр дженерика

https://github.com/Microsoft/TypeScript/issues/29595
да и первый нельзя)
источник

NT

Nikita Tkachuk in ☄️ effector
фильтруй мысли
да и первый нельзя)
всмысле ?)
источник

ф

фильтруй мысли... in ☄️ effector
Nikita Tkachuk
всмысле ?)
в твоём сообщении есть слово "второй"
источник

ф

фильтруй мысли... in ☄️ effector
Nikita Tkachuk
всмысле ?)
если ты поменяешь местами аргументы в своём примере на скрине, это ничего не изменит
источник

NT

Nikita Tkachuk in ☄️ effector
фильтруй мысли
если ты поменяешь местами аргументы в своём примере на скрине, это ничего не изменит
да, мой пример не рабочий из-за того что пытаюсь с двумя аргументами дженерика работать
источник

ф

фильтруй мысли... in ☄️ effector
Nikita Tkachuk
да, мой пример не рабочий из-за того что пытаюсь с двумя аргументами дженерика работать
твой пример не рабочий из-за того, что аргумент с ошибкой у тебя неиспользуемый
источник

NT

Nikita Tkachuk in ☄️ effector
фильтруй мысли
твой пример не рабочий из-за того, что аргумент с ошибкой у тебя неиспользуемый
да, так Async выводит, но юзать Err не получается )
источник