user_of_toster
@user_of_toster

Не считаете ли вы Utility types code smell'ом?

В тайпскрипте есть такая вещь, как utility types. Очень удобно, например, взять и скинуть с интерфейса несколько свойств или сделать свойства необязательными.

С другой стороны - в других языках (Java, C#) таких типов нет, и люди как-то выкручиваются, например, разделением интерфейса.

Вопрос такой - зачастую использование utility types может быть запахом в коде. Считаете ли вы использование utility types неумением соблюдать SOLID и наличием запаха в коде или наоборот хорошим признаком глубокого знания тайпскрипта?

Используете ли вы их в работе или стараетесь решить проблему классическими методами?
  • Вопрос задан
  • 439 просмотров
Решения вопроса 4
Aetae
@Aetae
Тлен
Всё зависит от того как вы походите к typescript: если он для вас является отдельным языком и вы пришли к нему от java\c# - то тогда действительно стоит всего этого "ужаса" избегать и писать "строго"; если же typescript для вас - надстройка над javascript, цель которой упростить написание кода и сократить количество шибок, сохранив "гибкость" и "вариативность" javascript - то стоит использовать всё что есть.)
Ответ написан
@twolegs
Злоупотребление этими типами действительно может выглядеть как дурно пахнущий код.
Но тот же Partial лучше рассматривать как синтаксический сахар - например в том же c# и java ссылочные поля по умолчанию могут принимать null, поэтому там такого не надо.
Omit же я бы не рекомендовал использовать там, где есть возможность контролировать типы. То есть если вы хотите модифицировать тип из какой-то библиотеки - Omit будет удобен, в случае если это ваш код, то я бы избегал его использования.
Ответ написан
Это очень полезно, например, при конструировании DTO которые используются для общения с бэкендом. Этих DTO может быть сотни и набор полей в них может частично совпадать, но при этом при использовании только классического наследования код может превратиться в жуткое месиво, неподдающееся редактированию. Так что да, смотря где и как использовать.
Ответ написан
bingo347
@bingo347
Ищу Java и TypeScript разработчиков
Даже сложно представить, во что превратится такой тип без utility типов:
type Builder<T, Orig extends T = T, Builded extends (keyof Orig)[] = []> = {
    [K in keyof T]: (value: T[K]) => Builder<Omit<T, K>, Orig, [K, ...Builded]>;
} & {
    build(): Pick<Orig, Builded[number]>;
};


https://www.typescriptlang.org/play?#code/C4TwDgpg...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы