Комментарии 4
Считаете ли вы, что имитация номинативных типов через брендирование улучшает устойчивость программы?
Используем вот такую штуку года где-то с 2018-го:
export type Nominal<T, Name extends string> = T & { [Symbol.species]: Name };
применяется например вот так:
type Price = Nominal<number, 'Price'>;
Качество кода выросло очень заметно.
+11
Беда с брендированием конкретно примитивных типов вроде number
, в первую очередь, в том, что стандартные арифметические операторы ничего об этом не знают. Поэтому нужны либо makeUint
на каждом шагу, либо свои функции-обертки вроде add(Uint, Uint)
. Я все надеюсь, что добавят перегрузки операторов на уровне объявлений, как сейчас есть для функций.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
TypeScript. Все еще без номинативной типизации