Size: a a a

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

2021 January 18

Т

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

class A {
 sku: string;
}

class B extends A {
 sku?: string; //
}
Omit, хотя с классами не получится наверное
источник

VS

Vladyslav Siroshtan in TypeScript — русскоговорящее сообщество
Тимофей 🛴
Omit, хотя с классами не получится наверное
Работает для классов? Вроде бы как только для типов/интекфейсов
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
Ну это будет не совсем честно.
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
Объект подкласса B всегда должно быть можно присвоить в переменную типа базового класса A
источник

Т

Тимофей 🛴 in TypeScript — русскоговорящее сообщество
Kirill Sukhomlin
Объект подкласса B всегда должно быть можно присвоить в переменную типа базового класса A
Да, лучше исправить код, так что бы нормально было
источник

KS

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

c⁣

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

class A {
 sku: string;
}

class B extends A {
 sku?: string; //
}
так это же не правильно
источник

VS

Vladyslav Siroshtan in TypeScript — русскоговорящее сообщество
Kirill Sukhomlin
Ну это будет не совсем честно.
Дело в том что у меня dto c более 100 полей и валидация + нестед. Это всё копировать ради optional выглядит не круто.
источник

KS

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

KS

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

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
И его и использовать
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
Тогда в него можно присваивать объекты и с обязательными полями
источник

KS

Kirill Sukhomlin in TypeScript — русскоговорящее сообщество
Не обязательно буквально interface, можно и просто type
источник

R

Roman in TypeScript — русскоговорящее сообщество
  async populateField(): Promise<(Document & { err?: any }) | { err: any }> {
   try {
     const doc: Document<[]> = await Site.find({}).populate('reports');
     console.log(`[LOG] doc`, `<${typeof doc}>`, doc);
     return doc;
   } catch (err) {
     return { err };
   }
 }
источник

R

Roman in TypeScript — русскоговорящее сообщество
как нормально написать?
источник

R

Roman in TypeScript — русскоговорящее сообщество
чую бред собрал
источник

R

Roman in TypeScript — русскоговорящее сообщество
я про типизацию
источник

R

Roman in TypeScript — русскоговорящее сообщество
это кусок бэка с mongoose
источник

VS

Vladyslav Siroshtan in TypeScript — русскоговорящее сообщество
Kirill Sukhomlin
Не обязательно буквально interface, можно и просто type
Сделал BaseA с опциональным полем, его расширяет A с обязательным полем.
источник

KS

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