Size: a a a

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

2021 January 18

DP

Dmitriy Pikulin in TypeScript — русскоговорящее сообщество
Art Mas
хм, спасибо, работает, но это будет сбивать с толку так как из NodeUnionSubtypes только кусок  NodeActionTypes будет использоваться
это да, тс конечно отловит так как ты в кондишене возвращаешь never, то все так рекомендую глянуть ту ссылку что я скинул выше, думаю должно сработать
источник

c⁣

createStore<🦉>... in TypeScript — русскоговорящее сообщество
Народ, подсобите написать mapped types.
Хочу преобразовать Record<number, [string, Container<T>]> в union из значений string и T

Вот тут репл; Пытаюсь понять, как реализовать такую трансформацию

UPD: уже решил
источник

AI

Aleksandr Ivanov in TypeScript — русскоговорящее сообщество
Всем привет) у кого есть свободное время, взгляните пожалуйста)
Вопрос такой. Тип T1 корректно выдает ошибку, потому что отсутствует поле E1.Bb
а вот тип T2 такой ошибки не выдает. Посмотрите, какой тип выводится для переменной b: Record<..> | Record<..> - че за бред?)
Либо я чего то не знаю

https://www.typescriptlang.org/play?#code/KYOwrgtgBAogjFA3gKClAggQygXigck03wBpUoAhAI1wKqtOQF9lkAXATwAdgoAVOAB4+UYAA82oACYBnKDLYAnAJYgA5gD5aAJWABjAPaKpwklHAQqwRQG0AuhtaGQCqJgBc-IfC14UaG3gAOiw7Txs4OzImAG5Wdm5ePgAmYVEJaTkFFXUoAB9zYAA3a1oQYutffnTJEFlCksUoAH4G0s9dQ2NTc0grWwc45GdXKk8UwR9afyhAuBDMMNnI5higA
источник

c⁣

createStore<🦉>... in TypeScript — русскоговорящее сообщество
Aleksandr Ivanov
Всем привет) у кого есть свободное время, взгляните пожалуйста)
Вопрос такой. Тип T1 корректно выдает ошибку, потому что отсутствует поле E1.Bb
а вот тип T2 такой ошибки не выдает. Посмотрите, какой тип выводится для переменной b: Record<..> | Record<..> - че за бред?)
Либо я чего то не знаю

https://www.typescriptlang.org/play?#code/KYOwrgtgBAogjFA3gKClAggQygXigck03wBpUoAhAI1wKqtOQF9lkAXATwAdgoAVOAB4+UYAA82oACYBnKDLYAnAJYgA5gD5aAJWABjAPaKpwklHAQqwRQG0AuhtaGQCqJgBc-IfC14UaG3gAOiw7Txs4OzImAG5Wdm5ePgAmYVEJaTkFFXUoAB9zYAA3a1oQYutffnTJEFlCksUoAH4G0s9dQ2NTc0grWwc45GdXKk8UwR9afyhAuBDMMNnI5higA
а зачем там string | never?
источник

AI

Aleksandr Ivanov in TypeScript — русскоговорящее сообщество
createStore<🦉> ⁣
а зачем там string | never?
вообще там void изначально был вместо never. просто экспериментировал. Просто цель сделать необязательность.
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
const b: Record<E1.Aa, number[]> | Record<E1.Bb, number[]>
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
ну так у него другой тип выводится
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
честно говоря, сам бы я такое сходу не написал
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
но, очевидно, тип другой
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
а если тип K содержит ограниченное перечисление вариантов, то использование его как ключа в обычном Record будет требовать наличия всех возможных ключей сразу
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
при этом для T2 работает такое правило.
Если у нас объявлен тип { foo: V1 } | { bar: V2 }, то значение типа { foo: V1 } & { bar: V2 } (что есть { foo: V1, bar: V2 }) так же подойдёт
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
ну потому что логично.
Если нам нужен объект типа что-то зелёное _или_ змея, то зелёная змея подходит
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
Aleksandr Ivanov
вообще там void изначально был вместо never. просто экспериментировал. Просто цель сделать необязательность.
> Просто цель сделать необязательность.
Partial<Record<E1, number[]>> ?
источник

AI

Aleksandr Ivanov in TypeScript — русскоговорящее сообщество
нет, нужна условная необязательность))
вот именно через extends ? .. : ..
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
единственное, Partial разрешит и совсем пустой объект
источник

AI

Aleksandr Ivanov in TypeScript — русскоговорящее сообщество
все, нашел ответ. Пока не осмыслил, но проблему решает. Повтыкаю в доку
https://github.com/microsoft/TypeScript/issues/33110
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
мне казалось, что это фича )
источник

AI

Aleksandr Ivanov in TypeScript — русскоговорящее сообщество
так вроде и есть что фича, но я о таком не знал) буду знать, и может кому еще полезно будет.
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
да надо покопаться, а то я не всегда понимаю почему в каких-то случаях distributive behaviour срабатывает, а в каких-то надо наоборот какими-то костылями его вызывать
источник

VS

Vladyslav Siroshtan in TypeScript — русскоговорящее сообщество
Всем привет, как расширить класс А классом В и сделать имеющееся обязательное поле в классе А опциональным в классе В ?
- ругается что нельзя присвоить undefined обязательному полю с типом string.

class A {
 sku: string;
}

class B extends A {
 sku?: string; //
}
источник