Size: a a a

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

2020 March 25

EG

Egor Gorbachev in TypeScript — русскоговорящее сообщество
John Smith
Подскажите, на вход приходит такая штука:
element: AccountCategoryType | CalculationType

Эти типы отличаются полями, я проверяю, если ли у element определенное поле, а дальше скармливаю element одному из двух компонентов. Один (пусть будет A) ожидает на входе AccountCategoryType, другой (пусть будет B) - CalculationType.
Но я получаю ошибку, что нельзя скормить компоненту A element типа AccountCategoryType | CalculationType. Как мне это разрулить?
Попробуй через if ('prop' in element),  где prop это поле, которое есть в A, но нет в B
источник

JS

John Smith in TypeScript — русскоговорящее сообщество
Egor Gorbachev
Попробуй через if ('prop' in element),  где prop это поле, которое есть в A, но нет в B
Ооооо, получилось, спасибо
источник

R

Remite in TypeScript — русскоговорящее сообщество
John Smith
Подскажите, на вход приходит такая штука:
element: AccountCategoryType | CalculationType

Эти типы отличаются полями, я проверяю, если ли у element определенное поле, а дальше скармливаю element одному из двух компонентов. Один (пусть будет A) ожидает на входе AccountCategoryType, другой (пусть будет B) - CalculationType.
Но я получаю ошибку, что нельзя скормить компоненту A element типа AccountCategoryType | CalculationType. Как мне это разрулить?
почитайте ещё за ТаймГварды

const isCar = (variableToCheck: any): variableToCheck is Car =>
 (variableToCheck as Car).turnSteeringWheel !== undefined;

функция что бы доказать что переменная определенного типа
источник

RT

Ruslan Tyutin in TypeScript — русскоговорящее сообщество
Type 'Number' is not assignable to type 'number 
нужна помощь, как убрать ошибку?
источник

AK

Alexey Kuzmichev in TypeScript — русскоговорящее сообщество
Ruslan Tyutin
Type 'Number' is not assignable to type 'number 
нужна помощь, как убрать ошибку?
у тебя какой-то из типов юзает Number?
источник

🦉⁣

🦉 ⁣ in TypeScript — русскоговорящее сообщество
Ruslan Tyutin
Type 'Number' is not assignable to type 'number 
нужна помощь, как убрать ошибку?
где-то создаешь new Number

или опечатался, вместо number, написал Number
источник

RT

Ruslan Tyutin in TypeScript — русскоговорящее сообщество
так разве в typescript нужно number а не Number указывать?
источник

🦉⁣

🦉 ⁣ in TypeScript — русскоговорящее сообщество
Ruslan Tyutin
так разве в typescript нужно number а не Number указывать?
Number это инстанс new Number
источник

🦉⁣

🦉 ⁣ in TypeScript — русскоговорящее сообщество
поэтому, да, правильно:
number, string, boolean
источник

RT

Ruslan Tyutin in TypeScript — русскоговорящее сообщество
Чооорт, ладно спасибо)
источник

JS

John Smith in TypeScript — русскоговорящее сообщество
Тогда уж попутно и еще вопрос задам. Можно расширить один интерфейс от другого и попутно прибить поле? Или хотя бы сделать его необязательным.
источник

DR

Dmitry Rogach in TypeScript — русскоговорящее сообщество
John Smith
Тогда уж попутно и еще вопрос задам. Можно расширить один интерфейс от другого и попутно прибить поле? Или хотя бы сделать его необязательным.
Да, интерфейсы наследуются (и типы через &)
источник

JS

John Smith in TypeScript — русскоговорящее сообщество
Dmitry Rogach
Да, интерфейсы наследуются (и типы через &)
Вопрос в том, что у меня
- В интерфейсе A есть некое поле someField
- Интерфейс B наследуется от A
- В интерфейсе B мне нужно сделать поле someField необязательным или вообще прибить его.

Как это сделать?
источник

DR

Dmitry Rogach in TypeScript — русскоговорящее сообщество
никак, только вынести из A все поля, что ты хочешь переиспользовать, в отдельный базовый интерфейс 🙂
источник

DR

Dmitry Rogach in TypeScript — русскоговорящее сообщество
и от него уже наследовать и A, и B
источник

JS

John Smith in TypeScript — русскоговорящее сообщество
Dmitry Rogach
никак, только вынести из A все поля, что ты хочешь переиспользовать, в отдельный базовый интерфейс 🙂
Я примерно так и предполагал, но спросить у сенсея никогда не лишне )))
Спасибо
источник

DR

Dmitry Rogach in TypeScript — русскоговорящее сообщество
Может сенсеи еще чего-то добавят 🙂
источник

EG

Egor Gorbachev in TypeScript — русскоговорящее сообщество
John Smith
Вопрос в том, что у меня
- В интерфейсе A есть некое поле someField
- Интерфейс B наследуется от A
- В интерфейсе B мне нужно сделать поле someField необязательным или вообще прибить его.

Как это сделать?
Удалить поле можно через Omit:
type Test = Omit<User, 'key'>


Для замены типа поля можно написать свой универсальный тип:

type Patch<T, Props> = Omit<T, keyof Props> & Props;

type User = { id: number; name: string, age: number }
type OptionalAge = Patch<User, { age?: number }>


Этот готовый тип уже есть в ts-essentials: https://github.com/krzkaczor/ts-essentials/blob/master/lib/types.ts#L236
источник

JS

John Smith in TypeScript — русскоговорящее сообщество
Egor Gorbachev
Удалить поле можно через Omit:
type Test = Omit<User, 'key'>


Для замены типа поля можно написать свой универсальный тип:

type Patch<T, Props> = Omit<T, keyof Props> & Props;

type User = { id: number; name: string, age: number }
type OptionalAge = Patch<User, { age?: number }>


Этот готовый тип уже есть в ts-essentials: https://github.com/krzkaczor/ts-essentials/blob/master/lib/types.ts#L236
Оооооо, молюсь тебе!!!!
источник

DR

Dmitry Rogach in TypeScript — русскоговорящее сообщество
Точно, забыл про омит в типах
источник