@typescript_ru

Страница 566 из 669
Oleg
02.04.2018
11:11:34
Какие варианты? обмазаться классами и cеттерами?)

Дмитрий
02.04.2018
11:13:02
Начать с обычного Map, а там как пойдёт уже) Не думаю что здесь потребутся классы

И не всегда есть смысл таскать за собой полный тип везде и всегда

То есть в ряде случаев можно просто переходить к обобщённым дженерикам и обратно (если тс это вывозит)

Google
Oleg
02.04.2018
11:16:00
Но это же за собой потянет ручной маппинг, везде огромные списки, вместо одной функции гибкой MyMap .set('key', value) .set('key', value) .set('key', value) if (value) { MyMap .set('key', value) } ...

Дмитрий
02.04.2018
11:17:11
> Гибкой функции > случай для any Ну как тебе сказать))

Если ты обнаруживаешь что вот-вот свалишься в any то это определённо совсем не гибкая функция, скорее наоборот

А придумать более неудачную для типизации вещь чем Object, который кастует все ключи в строки по изощрённому алгоритму да ещё и в прототипе имеет кучу мусора, довольно сложно

Oleg
02.04.2018
11:28:22
То есть, все данные в формате ключ: значение с обычного объекта лучше в Map переводить?

Дмитрий
02.04.2018
11:30:09
Всё что не имеет фиксированной формы либо юзается как key value мапа

Сначала кажется вау дифф по объектам, но какой смысл, если у всего остального есть нативная поддержка человеческого for of

Set, Map и т.д. — всё нормально итерируется и типизируется без излишней магии)

Oleg
02.04.2018
11:33:06
Щас попробую переписать и осознать, это интересно

потому что у меня куча кейсов, когда я перебираю объекты, и как-то трансформирую

Дмитрий
02.04.2018
11:33:30
Переписать сходу вряд ли получится, я скорее просто к сведению говорю)

Oleg
02.04.2018
11:33:41
и везде с типизацией провал

Дмитрий
02.04.2018
11:33:55
Ну вот да

Google
Oleg
02.04.2018
11:34:20
надо перемапить, потом удалить поля с пустыми значениями, потом трансформировать по списку правил

ну плюс те, что lodash методы покрывают

Мне кажется, или Map с дженериками вообще невозможно типизировать?

Oleg
02.04.2018
11:54:16
по дефолту то Map<any, any>



Aleh
02.04.2018
11:54:41
плохой дефолт

Le
02.04.2018
11:54:44
так у вас вообще никаких типов нигде нет

это тс вообще?

Aleh
02.04.2018
11:55:19
noImplicitAny в тс это мастхев

Morsik
02.04.2018
11:55:27
это тс вообще?
джс это валидный тс

Le
02.04.2018
11:55:46
джс это валидный тс
да я понимаю, но смысл от тс без флага strict

Morsik
02.04.2018
11:55:58
Le
02.04.2018
11:57:22
иногда выводит типы
иногда и жс выводит если вскодом пользоваться

Oleg
02.04.2018
11:57:29
Да без типов, потому что я не понимаю как динамические мапы описать

С дженериками

Morsik
02.04.2018
11:58:09
Map<K, V>

а, понял

Le
02.04.2018
11:58:32
remap<T, U>(src: Map<string, T>, dist: Map<string, U>, ....

Morsik
02.04.2018
11:59:17
T и K extends string

Google
Morsik
02.04.2018
11:59:21
а, не

он мапает же ключи

remap<T extends string, U extends string, K>(src: Map<T, K>, dist: Map<U, K>, mapping: {[Key: T]: U}) (не проверял)

Дмитрий
02.04.2018
12:08:13
for (const [yourKey, yourValue] of dist)

Идея в том, что тапл типизируется иначе чем массив

Плюс entries нигде не нужны особо

У тебя там бага кстати

Ещё хинт — собирать вручную мапу или сет вообще не требуется

Morsik
02.04.2018
12:13:03
вторая ветка не исполняется никогда?

Дмитрий
02.04.2018
12:13:55
Делает .keys() а потом продолжает по старому брать [0] и [1] значение

Если только конечно ему не нужна была первая и вторая буква)

Oleg
02.04.2018
12:14:47
Да это ладно, реализация сейчас волнует в последнюю очередь

Дмитрий
02.04.2018
12:17:58
Ааа, я понял в чём проблема

Тс реально не умеет итерироваться по Map и Set ?

Это как ваще

Oleg
02.04.2018
12:19:13
Если дженерики, то ругается

Дмитрий
02.04.2018
12:19:17
Ппц

Я ток пример бомбезный набрал

Google
Дмитрий
02.04.2018
12:19:29
function* remap<K>(keys: Set<K>) { for (const key of keys) yield [key, 'str'] } const set: Set<number> = new Set const map = new Map(remap(set))

Открыл в репле и приехали

Oleg
02.04.2018
12:20:10
:)

Дмитрий
02.04.2018
12:23:09
Там проблема на строчку выше

Le
02.04.2018
12:24:23
шапка цикла? с ней вроде всё ок

Дмитрий
02.04.2018
12:24:47


Le
02.04.2018
12:26:05


Дмитрий
02.04.2018
12:26:06
Не, чёт не так, не может быть чтобы нельзя было итерироваться по итераблам

Le
02.04.2018
12:27:06
там либо версия либо настройки странные в репле

например "lib": [ "esnext" ], "target": "es5",

и у меня тоже такая же ошибка

Aleh
02.04.2018
12:40:02
да, если надо транспайлить, то куча ограничений

Дмитрий
02.04.2018
12:40:32
Но с кастами весь смысл пропадает ? Там фича была в том, что комбинируя Map/Set с Iterable можно неплохо так упрощать код и усиливать вывод

Из-за того, что объекты коллекций при итерации доступны напрямую, а не через всякие obj[key]

Artem
02.04.2018
13:09:27
чьерт, такая идея пропала ((

Oleg
02.04.2018
14:10:02
Вроде в итоге выводится результат ожидаемый http://www.typescriptlang.org/play/index.html#src=type%20Diff%3CT%20extends%20string%2C%20U%20extends%20string%3E%20%3D%20(%0D%0A%20%20%20%20%7B%20%5BP%20in%20T%5D%3A%20P%20%7D%20%26%0D%0A%20%20%20%20%7B%20%5BP%20in%20U%5D%3A%20never%20%7D%20%26%0D%0A%20%20%20%20%7B%20%5Bx%3A%20string%5D%3A%20never%20%7D%0D%0A)%5BT%5D%3B%0D%0A%20type%20Cross%3CT%20extends%20string%2C%20U%20extends%20string%3E%20%3D%20(%0D%0A%20%20%20%20%7B%20%5BP%20in%20T%5D%3A%20P%20%7D%0D%0A)%5BT%20%26%20U%5D%3B%0D%0Atype%20Omit%3CT%2C%20K%20extends%20keyof%20T%3E%20%3D%20%7B%20%5BP%20in%20Diff%3Ckeyof%20T%2C%20K%3E%5D%3A%20T%5BP%5D%20%7D%3B%0D%0Atype%20Overwrite%3CT%2C%20U%3E%20%3D%20%7B%20%5BP%20in%20Diff%3Ckeyof%20T%2C%20keyof%20U%3E%5D%3A%20T%5BP%5D%20%7D%20%26%20U%3B%0D%0A%0D%0Atype%20Mapped%3CS%2C%20D%2C%20M%3E%20%3D%20(%0D%0A%20%20%20%20Omit%3CD%2C%20Cross%3Ckeyof%20D%2C%20keyof%20Pick%3CS%2C%20keyof%20S%3E%3E%3E%20%26%0D%0A%20%20%20%20Omit%3CS%2C%20Cross%3Ckeyof%20S%2C%20keyof%20M%3E%3E%0D%0A)%3B%0D%0A%0D%0Aconst%20source%20%3D%20%7B%20b%3A%202%2C%20c_c%3A%20%5B%5D%2C%20d%3A%20'test'%20%7D%3B%0D%0Aconst%20dist%20%3D%20%7B%20a%3A%201%2C%20cC%3A%20%7B%7D%2C%20d%3A%20''%20%7D%3B%0D%0Aconst%20mapping%20%3D%20%7B%20c_c%3A%20'cC'%20%7D%3B%0D%0A%0D%0A%2F%2F%20const%20mappedTest%3A%20Mapped%3Ctypeof%20source%2C%20typeof%20dist%2C%20typeof%20mapping%3E%20%3D%20%7B%20a%3A%201%2C%20b%3A%202%2C%20cC%3A%20%5B%5D%2C%20d%3A%20'test'%20%7D%3B%0D%0A%0D%0Aexport%20default%20function%20remap%3CS%2C%20D%2C%20M%3E(source%3A%20S%2C%20dest%3A%20D%2C%20mapping%3A%20M)%3A%20Mapped%3CS%2C%20D%2C%20M%3E%20%7B%0D%0A%20%20%20%20const%20result%20%3D%20Object.assign(%7B%7D%2C%20dest%2C%20source)%3B%0D%0A%0D%0A%20%20%20%20Object.keys(source).forEach((key)%20%3D%3E%20%7B%0D%0A%20%20%20%20%20%20%20%20if%20(key%20in%20mapping)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20delete%20result%5Bkey%5D%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20result%5Bmapping%5Bkey%5D%5D%20%3D%20source%5Bkey%5D%3B%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%7D)%3B%0D%0A%0D%0A%20%20%20%20return%20result%3B%0D%0A%7D%0D%0A%0D%0Aconst%20result%20%3D%20remap(source%2C%20dist%2C%20mapping)%3B

Google
Oleg
02.04.2018
14:10:47
Через тип - хелпер Cross определяю пересечения, но я его как-то криво написал, не до конца понимаю, как работает

Morsik
02.04.2018
14:11:02
Вроде в итоге выводится результат ожидаемый http://www.typescriptlang.org/play/index.html#src=type%20Diff%3CT%20extends%20string%2C%20U%20extends%20string%3E%20%3D%20(%0D%0A%20%20%20%20%7B%20%5BP%20in%20T%5D%3A%20P%20%7D%20%26%0D%0A%20%20%20%20%7B%20%5BP%20in%20U%5D%3A%20never%20%7D%20%26%0D%0A%20%20%20%20%7B%20%5Bx%3A%20string%5D%3A%20never%20%7D%0D%0A)%5BT%5D%3B%0D%0A%20type%20Cross%3CT%20extends%20string%2C%20U%20extends%20string%3E%20%3D%20(%0D%0A%20%20%20%20%7B%20%5BP%20in%20T%5D%3A%20P%20%7D%0D%0A)%5BT%20%26%20U%5D%3B%0D%0Atype%20Omit%3CT%2C%20K%20extends%20keyof%20T%3E%20%3D%20%7B%20%5BP%20in%20Diff%3Ckeyof%20T%2C%20K%3E%5D%3A%20T%5BP%5D%20%7D%3B%0D%0Atype%20Overwrite%3CT%2C%20U%3E%20%3D%20%7B%20%5BP%20in%20Diff%3Ckeyof%20T%2C%20keyof%20U%3E%5D%3A%20T%5BP%5D%20%7D%20%26%20U%3B%0D%0A%0D%0Atype%20Mapped%3CS%2C%20D%2C%20M%3E%20%3D%20(%0D%0A%20%20%20%20Omit%3CD%2C%20Cross%3Ckeyof%20D%2C%20keyof%20Pick%3CS%2C%20keyof%20S%3E%3E%3E%20%26%0D%0A%20%20%20%20Omit%3CS%2C%20Cross%3Ckeyof%20S%2C%20keyof%20M%3E%3E%0D%0A)%3B%0D%0A%0D%0Aconst%20source%20%3D%20%7B%20b%3A%202%2C%20c_c%3A%20%5B%5D%2C%20d%3A%20'test'%20%7D%3B%0D%0Aconst%20dist%20%3D%20%7B%20a%3A%201%2C%20cC%3A%20%7B%7D%2C%20d%3A%20''%20%7D%3B%0D%0Aconst%20mapping%20%3D%20%7B%20c_c%3A%20'cC'%20%7D%3B%0D%0A%0D%0A%2F%2F%20const%20mappedTest%3A%20Mapped%3Ctypeof%20source%2C%20typeof%20dist%2C%20typeof%20mapping%3E%20%3D%20%7B%20a%3A%201%2C%20b%3A%202%2C%20cC%3A%20%5B%5D%2C%20d%3A%20'test'%20%7D%3B%0D%0A%0D%0Aexport%20default%20function%20remap%3CS%2C%20D%2C%20M%3E(source%3A%20S%2C%20dest%3A%20D%2C%20mapping%3A%20M)%3A%20Mapped%3CS%2C%20D%2C%20M%3E%20%7B%0D%0A%20%20%20%20const%20result%20%3D%20Object.assign(%7B%7D%2C%20dest%2C%20source)%3B%0D%0A%0D%0A%20%20%20%20Object.keys(source).forEach((key)%20%3D%3E%20%7B%0D%0A%20%20%20%20%20%20%20%20if%20(key%20in%20mapping)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20delete%20result%5Bkey%5D%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20result%5Bmapping%5Bkey%5D%5D%20%3D%20source%5Bkey%5D%3B%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%7D)%3B%0D%0A%0D%0A%20%20%20%20return%20result%3B%0D%0A%7D%0D%0A%0D%0Aconst%20result%20%3D%20remap(source%2C%20dist%2C%20mapping)%3B
>delete может без этого?

а, я кажется понял

Вроде в итоге выводится результат ожидаемый http://www.typescriptlang.org/play/index.html#src=type%20Diff%3CT%20extends%20string%2C%20U%20extends%20string%3E%20%3D%20(%0D%0A%20%20%20%20%7B%20%5BP%20in%20T%5D%3A%20P%20%7D%20%26%0D%0A%20%20%20%20%7B%20%5BP%20in%20U%5D%3A%20never%20%7D%20%26%0D%0A%20%20%20%20%7B%20%5Bx%3A%20string%5D%3A%20never%20%7D%0D%0A)%5BT%5D%3B%0D%0A%20type%20Cross%3CT%20extends%20string%2C%20U%20extends%20string%3E%20%3D%20(%0D%0A%20%20%20%20%7B%20%5BP%20in%20T%5D%3A%20P%20%7D%0D%0A)%5BT%20%26%20U%5D%3B%0D%0Atype%20Omit%3CT%2C%20K%20extends%20keyof%20T%3E%20%3D%20%7B%20%5BP%20in%20Diff%3Ckeyof%20T%2C%20K%3E%5D%3A%20T%5BP%5D%20%7D%3B%0D%0Atype%20Overwrite%3CT%2C%20U%3E%20%3D%20%7B%20%5BP%20in%20Diff%3Ckeyof%20T%2C%20keyof%20U%3E%5D%3A%20T%5BP%5D%20%7D%20%26%20U%3B%0D%0A%0D%0Atype%20Mapped%3CS%2C%20D%2C%20M%3E%20%3D%20(%0D%0A%20%20%20%20Omit%3CD%2C%20Cross%3Ckeyof%20D%2C%20keyof%20Pick%3CS%2C%20keyof%20S%3E%3E%3E%20%26%0D%0A%20%20%20%20Omit%3CS%2C%20Cross%3Ckeyof%20S%2C%20keyof%20M%3E%3E%0D%0A)%3B%0D%0A%0D%0Aconst%20source%20%3D%20%7B%20b%3A%202%2C%20c_c%3A%20%5B%5D%2C%20d%3A%20'test'%20%7D%3B%0D%0Aconst%20dist%20%3D%20%7B%20a%3A%201%2C%20cC%3A%20%7B%7D%2C%20d%3A%20''%20%7D%3B%0D%0Aconst%20mapping%20%3D%20%7B%20c_c%3A%20'cC'%20%7D%3B%0D%0A%0D%0A%2F%2F%20const%20mappedTest%3A%20Mapped%3Ctypeof%20source%2C%20typeof%20dist%2C%20typeof%20mapping%3E%20%3D%20%7B%20a%3A%201%2C%20b%3A%202%2C%20cC%3A%20%5B%5D%2C%20d%3A%20'test'%20%7D%3B%0D%0A%0D%0Aexport%20default%20function%20remap%3CS%2C%20D%2C%20M%3E(source%3A%20S%2C%20dest%3A%20D%2C%20mapping%3A%20M)%3A%20Mapped%3CS%2C%20D%2C%20M%3E%20%7B%0D%0A%20%20%20%20const%20result%20%3D%20Object.assign(%7B%7D%2C%20dest%2C%20source)%3B%0D%0A%0D%0A%20%20%20%20Object.keys(source).forEach((key)%20%3D%3E%20%7B%0D%0A%20%20%20%20%20%20%20%20if%20(key%20in%20mapping)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20delete%20result%5Bkey%5D%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20result%5Bmapping%5Bkey%5D%5D%20%3D%20source%5Bkey%5D%3B%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%7D)%3B%0D%0A%0D%0A%20%20%20%20return%20result%3B%0D%0A%7D%0D%0A%0D%0Aconst%20result%20%3D%20remap(source%2C%20dist%2C%20mapping)%3B
у тебя лишние проперти появятся же если они есть в dist, но нет в mapping и в source

Oleg
02.04.2018
14:16:24
Diff, Omit и Overwrite если что из issue тайпскрипта взял

Le
02.04.2018
14:24:53
Diff, Omit и Overwrite если что из issue тайпскрипта взял
там в 2.8 уже упростилось много таких костылей

например type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>

Oleg
02.04.2018
14:26:53
Блин, надо обновиться

andretshurotshka?❄️кде
02.04.2018
14:49:36
в тс же все наоборот через объекты и кучу маппед типов типизируется только



если ток так



from
02.04.2018
14:54:59
А можно в ts импортировать объект из js файла и создать тип по ключам этого объекта?

типа как-то так // file.js export const obj = { 'one': 1, 'two': 2 } // file.ts import { obj } from './file'; type SomeType = keyof obj;

Олег
02.04.2018
14:56:56
нет

from
02.04.2018
14:57:01
эх

Страница 566 из 669