Size: a a a

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

2020 April 14

ЗП

Зигохистоморфный Препроморфизм in TypeScript — русскоговорящее сообщество
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Хорошо. Допустим, у вас массив из 20 Result (err или ok) - как вы их объединяете в единый Result без reduce, определённого в Result классе?
[Either a b] -> `Either a [b]?)
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪ in TypeScript — русскоговорящее сообщество
Pavel Shakhov (pongo)
function combine<T extends unknown[]>(results: ResultsOfT<T>): Result<T> {
 for (const result of results) {
   if (result.isErr) return result;
 }
 return Result.ok((results as OksOfT<T>).map(result => result.value) as T);
}
А если нужно всё ошибки? Например, валидация формы, и несколько полей неверны?
источник

ЗП

Зигохистоморфный Препроморфизм in TypeScript — русскоговорящее сообщество
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
А если нужно всё ошибки? Например, валидация формы, и несколько полей неверны?
это уже Validation c моноидом по ветке ошибок
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪ in TypeScript — русскоговорящее сообщество
Pavel Shakhov (pongo)
function combine<T extends unknown[]>(results: ResultsOfT<T>): Result<T> {
 for (const result of results) {
   if (result.isErr) return result;
 }
 return Result.ok((results as OksOfT<T>).map(result => result.value) as T);
}
Ну вот, ваш reduce не "редьюсит" значения, а просто выдаёт массив as T
источник

PS

Pavel Shakhov (pongo) in TypeScript — русскоговорящее сообщество
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
А если нужно всё ошибки? Например, валидация формы, и несколько полей неверны?
через filter
источник

PS

Pavel Shakhov (pongo) in TypeScript — русскоговорящее сообщество
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Ну вот, ваш reduce не "редьюсит" значения, а просто выдаёт массив as T
когда писал код, то не нашел других вариантов, чтобы сохранялся порядок типов в примере типа

const result = Result.combine<[Gender, Cm]>([validateGender(), validateHeight()]);

const [gender, height] = result.value;
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪ in TypeScript — русскоговорящее сообщество
Pavel Shakhov (pongo)
когда писал код, то не нашел других вариантов, чтобы сохранялся порядок типов в примере типа

const result = Result.combine<[Gender, Cm]>([validateGender(), validateHeight()]);

const [gender, height] = result.value;
Ну, кроме массива может быть ведь объект, дерево и любая другая структура ведь
источник

PS

Pavel Shakhov (pongo) in TypeScript — русскоговорящее сообщество
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Ну, кроме массива может быть ведь объект, дерево и любая другая структура ведь
на вход функции поступает массив
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪ in TypeScript — русскоговорящее сообщество
Pavel Shakhov (pongo)
на вход функции поступает массив
В этом проблема - "скомбайнить" другую структуру результатов не получится - только если конвертировать в массив (при условии изоморфизма) и обратно
источник

ЗП

Зигохистоморфный Препроморфизм in TypeScript — русскоговорящее сообщество
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
В этом проблема - "скомбайнить" другую структуру результатов не получится - только если конвертировать в массив (при условии изоморфизма) и обратно
если этой структуре сделать моноид, то можно
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪ in TypeScript — русскоговорящее сообщество
Зигохистоморфный Препроморфизм
если этой структуре сделать моноид, то можно
Любой моноид изоморфен массиву? ;)
Может, в массив сконвертируете... А вот обратно - сомневаюсь
источник

ЗП

Зигохистоморфный Препроморфизм in TypeScript — русскоговорящее сообщество
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Любой моноид изоморфен массиву? ;)
Может, в массив сконвертируете... А вот обратно - сомневаюсь
если сделать инстанс Foldable то можно бесплатно получить toList
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪ in TypeScript — русскоговорящее сообщество
Зигохистоморфный Препроморфизм
если сделать инстанс Foldable то можно бесплатно получить toList
Ну так я же и говорю: а обратно в изначальную структуру?
источник

ЗП

Зигохистоморфный Препроморфизм in TypeScript — русскоговорящее сообщество
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Ну так я же и говорю: а обратно в изначальную структуру?
через свертку же
источник

LK

L K in TypeScript — русскоговорящее сообщество
всем привет
как замутить type что бы можно было заюзать только 1 type из нескольких допустимых
например
interface Prop1 {
 prop1: number;
 otherProp: number;
}

interface Prop2 {
 prop2: number;
}

type Prop = Prop1 | Prop2;

const fn (payload: Prop) => {};

fn( { prop2: 2 } ) // ok

fn( { prop2: 2, otherProp: 3 } ) // фигня

нужно что бы функцию принимала свойства только Prop1 или только Prop2
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪ in TypeScript — русскоговорящее сообщество
Так все лишние поля всё равно ведь принимаются. Даже если бы было просто fn (payload: Prop2), нет?
источник

LK

L K in TypeScript — русскоговорящее сообщество
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Так все лишние поля всё равно ведь принимаются. Даже если бы было просто fn (payload: Prop2), нет?
та как раз нет, если просто указать интерфейс то будет требовать только те поля которые объявлены  в интерфейсе
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪ in TypeScript — русскоговорящее сообщество
L K
та как раз нет, если просто указать интерфейс то будет требовать только те поля которые объявлены  в интерфейсе
Требовать - только те. Разрешать - и другие
источник

LK

L K in TypeScript — русскоговорящее сообщество
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Требовать - только те. Разрешать - и другие
можно ли сделать что бы не разрешало другие поля ? или я хочу невозможного ?
источник

ЗП

Зигохистоморфный Препроморфизм in TypeScript — русскоговорящее сообщество
L K
всем привет
как замутить type что бы можно было заюзать только 1 type из нескольких допустимых
например
interface Prop1 {
 prop1: number;
 otherProp: number;
}

interface Prop2 {
 prop2: number;
}

type Prop = Prop1 | Prop2;

const fn (payload: Prop) => {};

fn( { prop2: 2 } ) // ok

fn( { prop2: 2, otherProp: 3 } ) // фигня

нужно что бы функцию принимала свойства только Prop1 или только Prop2
передавай флаг

fn flg1 (payload: Type1)
fn flg2 (payload: Type2)

или даже индексируй пейлоад

fn({flg: flgType1, payload: Type1})
и делай перегрузку
источник