Size: a a a

TypeScript — русскоговорящее сообщество

2020 March 04

c

cloudedbe in TypeScript — русскоговорящее сообщество
type OmitByValue<T, ValueType> = Pick<
 T,
 { [Key in keyof T]-?: T[Key] extends ValueType ? never : Key }[keyof T]
>;

type A = OmitByValue<TObj, null | undefined>
источник

c

cloudedbe in TypeScript — русскоговорящее сообщество
Ну зачекай исходники
источник

c

cloudedbe in TypeScript — русскоговорящее сообщество
источник

AP

Arnold Pataki in TypeScript — русскоговорящее сообщество
cloudedbe
type OmitByValue<T, ValueType> = Pick<
 T,
 { [Key in keyof T]-?: T[Key] extends ValueType ? never : Key }[keyof T]
>;

type A = OmitByValue<TObj, null | undefined>
да, то что надо, спасибо)
источник

AP

Arnold Pataki in TypeScript — русскоговорящее сообщество
cloudedbe
Ну зачекай исходники
кстати, а для чего делается [keyof T] в конце? не очень это понимаю
источник

P

Pavel in TypeScript — русскоговорящее сообщество
Ребят, всем привет!
Помогите типизировать
const sortByAlphabet = (arr, props) => {
 return [...arr].sort((a, b) => {
   return (
     props.reduce((acc, prop) => {
       if (acc === 0) {
         const [p1, p2] = [a[prop], b[prop]];
         acc = p1 > p2 ? 1 : p1 < p2 ? -1 : 0;
       }
       return acc;
     }, 0),
     ''
   );
 });
};

let arr = [{ "sportId": 1, "tournamentUnionId": 1463, "tournamentId": 2821, "tournamentStageId": 1581, "startDate": "2020-03-04T15:00:00Z", "objects": { "1": "Ахмат", "2": "Зенит" }, "name": "Ахмат - Зенит", "scores": { "100": { "100": { "0": { "1": 0, "2": 0 } }, "101": { "1": { "1": 0, "2": 0 } }, "106": { "0": { "1": 0, "2": 0 } } } }, "resultsCount": 1 }, { "sportId": 1, "tournamentUnionId": 1463, "tournamentId": 2821, "tournamentStageId": 1581, "startDate": "2020-03-04T16:30:00Z", "objects": { "1": "Спартак Москва", "2": "ЦСКА" }, "name": "Спартак Москва - ЦСКА", "resultsCount": 1 }, { "sportId": 1, "tournamentUnionId": 1463, "tournamentId": 2821, "tournamentStageId": 1581, "startDate": "2020-03-04T12:00:00Z", "objects": { "1": "Шинник", "2": "Урал" }, "name": "Шинник - Урал", "resultsCount": 1 }]
let props = ["name"]

sortByAlphabet(arr, props);
источник

AP

Arnold Pataki in TypeScript — русскоговорящее сообщество
Pavel
Ребят, всем привет!
Помогите типизировать
const sortByAlphabet = (arr, props) => {
 return [...arr].sort((a, b) => {
   return (
     props.reduce((acc, prop) => {
       if (acc === 0) {
         const [p1, p2] = [a[prop], b[prop]];
         acc = p1 > p2 ? 1 : p1 < p2 ? -1 : 0;
       }
       return acc;
     }, 0),
     ''
   );
 });
};

let arr = [{ "sportId": 1, "tournamentUnionId": 1463, "tournamentId": 2821, "tournamentStageId": 1581, "startDate": "2020-03-04T15:00:00Z", "objects": { "1": "Ахмат", "2": "Зенит" }, "name": "Ахмат - Зенит", "scores": { "100": { "100": { "0": { "1": 0, "2": 0 } }, "101": { "1": { "1": 0, "2": 0 } }, "106": { "0": { "1": 0, "2": 0 } } } }, "resultsCount": 1 }, { "sportId": 1, "tournamentUnionId": 1463, "tournamentId": 2821, "tournamentStageId": 1581, "startDate": "2020-03-04T16:30:00Z", "objects": { "1": "Спартак Москва", "2": "ЦСКА" }, "name": "Спартак Москва - ЦСКА", "resultsCount": 1 }, { "sportId": 1, "tournamentUnionId": 1463, "tournamentId": 2821, "tournamentStageId": 1581, "startDate": "2020-03-04T12:00:00Z", "objects": { "1": "Шинник", "2": "Урал" }, "name": "Шинник - Урал", "resultsCount": 1 }]
let props = ["name"]

sortByAlphabet(arr, props);
братан, это так не работает... если что не получается или не понимаешь - спроси, тебе помогут, а делать за тебя твою работу никто не будет.
источник

P

Pavel in TypeScript — русскоговорящее сообщество
Arnold Pataki
братан, это так не работает... если что не получается или не понимаешь - спроси, тебе помогут, а делать за тебя твою работу никто не будет.
Окей, что тут не так?
источник

AP

Arnold Pataki in TypeScript — русскоговорящее сообщество
Pavel
Окей, что тут не так?
то, что у тебя по типу должно возвращаться string, а у тебя возращается number
источник

ЗП

Зигохистоморфный Препроморфизм in TypeScript — русскоговорящее сообщество
Pavel
Ребят, всем привет!
Помогите типизировать
const sortByAlphabet = (arr, props) => {
 return [...arr].sort((a, b) => {
   return (
     props.reduce((acc, prop) => {
       if (acc === 0) {
         const [p1, p2] = [a[prop], b[prop]];
         acc = p1 > p2 ? 1 : p1 < p2 ? -1 : 0;
       }
       return acc;
     }, 0),
     ''
   );
 });
};

let arr = [{ "sportId": 1, "tournamentUnionId": 1463, "tournamentId": 2821, "tournamentStageId": 1581, "startDate": "2020-03-04T15:00:00Z", "objects": { "1": "Ахмат", "2": "Зенит" }, "name": "Ахмат - Зенит", "scores": { "100": { "100": { "0": { "1": 0, "2": 0 } }, "101": { "1": { "1": 0, "2": 0 } }, "106": { "0": { "1": 0, "2": 0 } } } }, "resultsCount": 1 }, { "sportId": 1, "tournamentUnionId": 1463, "tournamentId": 2821, "tournamentStageId": 1581, "startDate": "2020-03-04T16:30:00Z", "objects": { "1": "Спартак Москва", "2": "ЦСКА" }, "name": "Спартак Москва - ЦСКА", "resultsCount": 1 }, { "sportId": 1, "tournamentUnionId": 1463, "tournamentId": 2821, "tournamentStageId": 1581, "startDate": "2020-03-04T12:00:00Z", "objects": { "1": "Шинник", "2": "Урал" }, "name": "Шинник - Урал", "resultsCount": 1 }]
let props = ["name"]

sortByAlphabet(arr, props);
ставки на спорт? большой развод?)
источник

P

Pavel in TypeScript — русскоговорящее сообщество
Зигохистоморфный Препроморфизм
ставки на спорт? большой развод?)
Не, просто спорт ресурс
источник
2020 March 05

🦉⁣

🦉 ⁣ in TypeScript — русскоговорящее сообщество
🦉 ⁣
Всем привет.

5 марта в Санкт-Петербурге пройдет первый митап, который расскажет подробнее об эффекторе, методиках использования и как же это всё работает под капотом.

ПРОГРАММА

18:00 - 18:10
Сборы, знакомство, общение

18:10 - 18:25
Введение: что такое эффектор, кому он нужен и зачем, краткая история появления, предпосылки и причины

18:30 - 19:10
Прикладное использование: из каких сущностей состоит API, какие проблемы решает, как писать сценарии на реальном примере

19:30 - 20:10
ServerSideRendering: какие сложности с SSR, разбор nextjs/razzle, построение своего решения на effector + react + styled

20:20 - 21:00
We need to go deeper: как всё устроено под капотом, чистые вычисления и барьеры, причем тут графы и как создать сущность

21:10 - 21:50
Секретный доклад: оставайтесь до конца мероприятия!

https://effector.timepad.ru/event/1255181/?utm_refcode=87d18c821c5c113b923a68ce90a247224bc7788f
На всякий случай напоминаю почему Effector вообще появился и какие у него плюсы:

— децентрализованность, декларативность, эффективность. требовался инструмент, позволяющий управлять данными в сложных приложениях без опасности раздуть монолитный центральный стор, с явным control flow, нормальной типизацией и емким апи
— сторы для приложения должны быть лёгкими, насколько это возможно — не должна пугать мысль о том, что нужно добавить ещё один стор для конкретных нужд
— сторы должны свободно совмещаться — идея в том, что данные, которые потребуются приложению, можно распределить статически, заранее показав как данные будут преобразоваться во время работы приложения
— принцип работы должен by design исключать необходимость в reselect, оповещая об изменениях только тех, кому они необходимы. это позволяет не задумываться о том, что у тебя будет триггериться всё приложение если ты захочешь вынести  стейт модалки из реакта. по совместительству это означает что приложения избавлены от проблем с перфомансом, возникшим у react-redux при переходе на контекст
— возможность, место, и способ вынести любую требуемую бизнес-логику из view, максимально упрощая компоненты
— независимость от спорных концепций — никаких декораторов, никаких зависимостей от реакта/rxjs либо необходимости юзать классы или прокси — ничего из этого не требуется для управления состоянием приложения и поэтому апи библиотеки использует только функции и простые js объекты
— предсказуемость апи. небольшое число базовых принципов переиспользуются в различных кейсах, снижая нагрузку на юзера и повышая узнаваемость. зная как работает .watch  в эвентах, можно догадаться, что делает функция .watch у стора
— приложение строится из комбинации базовых элементов и возможности строить новые.
нет никакого смысла стремиться выдать всё за стрим, за редьюсер или за обсервабл, в приложении требуются они все, и библиотека предлагает решение чтобы управлять структурой данных, а не скрывать её
источник

EG

Egor Gorbachev in TypeScript — русскоговорящее сообщество
🦉 ⁣
На всякий случай напоминаю почему Effector вообще появился и какие у него плюсы:

— децентрализованность, декларативность, эффективность. требовался инструмент, позволяющий управлять данными в сложных приложениях без опасности раздуть монолитный центральный стор, с явным control flow, нормальной типизацией и емким апи
— сторы для приложения должны быть лёгкими, насколько это возможно — не должна пугать мысль о том, что нужно добавить ещё один стор для конкретных нужд
— сторы должны свободно совмещаться — идея в том, что данные, которые потребуются приложению, можно распределить статически, заранее показав как данные будут преобразоваться во время работы приложения
— принцип работы должен by design исключать необходимость в reselect, оповещая об изменениях только тех, кому они необходимы. это позволяет не задумываться о том, что у тебя будет триггериться всё приложение если ты захочешь вынести  стейт модалки из реакта. по совместительству это означает что приложения избавлены от проблем с перфомансом, возникшим у react-redux при переходе на контекст
— возможность, место, и способ вынести любую требуемую бизнес-логику из view, максимально упрощая компоненты
— независимость от спорных концепций — никаких декораторов, никаких зависимостей от реакта/rxjs либо необходимости юзать классы или прокси — ничего из этого не требуется для управления состоянием приложения и поэтому апи библиотеки использует только функции и простые js объекты
— предсказуемость апи. небольшое число базовых принципов переиспользуются в различных кейсах, снижая нагрузку на юзера и повышая узнаваемость. зная как работает .watch  в эвентах, можно догадаться, что делает функция .watch у стора
— приложение строится из комбинации базовых элементов и возможности строить новые.
нет никакого смысла стремиться выдать всё за стрим, за редьюсер или за обсервабл, в приложении требуются они все, и библиотека предлагает решение чтобы управлять структурой данных, а не скрывать её
Записи докладов будут?
источник

🦉⁣

🦉 ⁣ in TypeScript — русскоговорящее сообщество
Egor Gorbachev
Записи докладов будут?
да
источник

V

Vyacheslav in TypeScript — русскоговорящее сообщество
Забавно что если я хочу найти свои сообщения в этом чате, мне нужно что-то написать
источник

A

Alex CherryTea in TypeScript — русскоговорящее сообщество
🦉 ⁣
На всякий случай напоминаю почему Effector вообще появился и какие у него плюсы:

— децентрализованность, декларативность, эффективность. требовался инструмент, позволяющий управлять данными в сложных приложениях без опасности раздуть монолитный центральный стор, с явным control flow, нормальной типизацией и емким апи
— сторы для приложения должны быть лёгкими, насколько это возможно — не должна пугать мысль о том, что нужно добавить ещё один стор для конкретных нужд
— сторы должны свободно совмещаться — идея в том, что данные, которые потребуются приложению, можно распределить статически, заранее показав как данные будут преобразоваться во время работы приложения
— принцип работы должен by design исключать необходимость в reselect, оповещая об изменениях только тех, кому они необходимы. это позволяет не задумываться о том, что у тебя будет триггериться всё приложение если ты захочешь вынести  стейт модалки из реакта. по совместительству это означает что приложения избавлены от проблем с перфомансом, возникшим у react-redux при переходе на контекст
— возможность, место, и способ вынести любую требуемую бизнес-логику из view, максимально упрощая компоненты
— независимость от спорных концепций — никаких декораторов, никаких зависимостей от реакта/rxjs либо необходимости юзать классы или прокси — ничего из этого не требуется для управления состоянием приложения и поэтому апи библиотеки использует только функции и простые js объекты
— предсказуемость апи. небольшое число базовых принципов переиспользуются в различных кейсах, снижая нагрузку на юзера и повышая узнаваемость. зная как работает .watch  в эвентах, можно догадаться, что делает функция .watch у стора
— приложение строится из комбинации базовых элементов и возможности строить новые.
нет никакого смысла стремиться выдать всё за стрим, за редьюсер или за обсервабл, в приложении требуются они все, и библиотека предлагает решение чтобы управлять структурой данных, а не скрывать её
Дебаг тулы как у редакса и вьюкса не предвидится?
источник

VA

Vladimir Alabov in TypeScript — русскоговорящее сообщество
Alex CherryTea
Дебаг тулы как у редакса и вьюкса не предвидится?
Сейчас есть effector-logger, он логгирует события в консоль плюс умеет в интеграцию с redux-devtools extension
источник

A

Alex CherryTea in TypeScript — русскоговорящее сообщество
Vladimir Alabov
Сейчас есть effector-logger, он логгирует события в консоль плюс умеет в интеграцию с redux-devtools extension
О, тема!
источник

s

shashkov0 in TypeScript — русскоговорящее сообщество
У меня есть объект result, который содержит следующие данные:

- если result.success === true, то там будет result.packet

- если !result.success, то там будет result.messages

Подскажите плиз как это правильно типизировать, сейчас сделано так:

type Cryptogram =
 | {
     success: true
     packet: string
   }
 | {
     messages: CryptogramErrors
   }
источник

M中

Mikhail 才藤 中村 Bashurov in TypeScript — русскоговорящее сообщество
shashkov0
У меня есть объект result, который содержит следующие данные:

- если result.success === true, то там будет result.packet

- если !result.success, то там будет result.messages

Подскажите плиз как это правильно типизировать, сейчас сделано так:

type Cryptogram =
 | {
     success: true
     packet: string
   }
 | {
     messages: CryptogramErrors
   }
Добавить success: false во второй вариант?
источник