type CompanyId = string & { __typename?: 'CompanyId' }
type UserId = string & { __typename?: 'UserId' }
const userId: UserId = 'user.id.1'
const companyId: CompanyId = 'company.id.1'
/*
Тип "CompanyId" не может быть назначен для типа "UserId".
Тип "CompanyId" не может быть назначен для типа "{ __typename?: "UserId" | undefined; }".
Типы свойства "__typename" несовместимы.
Тип ""CompanyId" | undefined" не может быть назначен для типа ""UserId" | undefined".
Тип ""CompanyId"" не может быть назначен для типа ""UserId" | undefined".
*/
const compiletimeError1: UserId = companyId
/*
Тип "UserId" не может быть назначен для типа "CompanyId".
Тип "UserId" не может быть назначен для типа "{ __typename?: "CompanyId" | undefined; }".
Типы свойства "__typename" несовместимы.
Тип ""UserId" | undefined" не может быть назначен для типа ""CompanyId" | undefined".
Тип ""UserId"" не может быть назначен для типа ""CompanyId" | undefined".
*/
const compiletimeError2: CompanyId = userId
В случае с радиогруппой: проверяется только факт наличия выбранного инпута, value='' является корректным значением, так как задаётся разработчиком напрямую
В случае с чекбоксом: в HTML нет такого понятия как группа чекбоксов, required работает только непосредственно на сам чекбокс. Чекбокс группы никогда не будет, вообще, 0, точка,. (везде есть а HTML особенный)
<form>
<input name='gr' type='checkbox' value='1' required /><!-- must be checked -->
<input name='gr' type='checkbox' value='2' required /><!-- must be checked -->
<input name='gr' type='checkbox' value='3' required /><!-- must be checked -->
<button>send</button>
</form>
Но...
… мы то все прекрасно понимаем, что наличие всяких там name/value/required/checked/form и прочих легаси атрибутов это моветон, скучно и никому не интересно, у нас же есть {Framework}JS! Балом правят всякие ng-form билдеры, код вида this.setState({… }) и вот это вот всё
Закрывание по клику в body решается крайне просто через :focus-within и небольшим скриптом, который на esc будет сбрасывать фокус.
Accessability вполне можно наваять при помощи aria-*, но это не точно, не сталкивался, не знаю, я мимокрокодил, рядомстоял, из одного уха влетела.
После долгих изысканий в дизайне и функционале в лучше просто оставить select как есть, игра не стоит свеч.
В подобном подходе вообще минусов нет, за исключением одного и единственного: в React dev tools будет выводиться что-то типа Anonymous Component (или просто Component). Такая же штука с Vue. Иногда очень полезно видеть дерево компонентов и у кого что внутри твориться (пропсы, стейт, контекст). Естественно на продакшене такие вещи всякими минификаторами убиваются (насколько помню, можно выключить).
В обычном случае: если выбрать value='' то селект считается пустым и необходимо заполнить
В случае с радиогруппой: проверяется только факт наличия выбранного инпута, value='' является корректным значением, так как задаётся разработчиком напрямую
В случае с чекбоксом: в HTML нет такого понятия как группа чекбоксов, required работает только непосредственно на сам чекбокс. Чекбокс группы никогда не будет, вообще, 0, точка,. (везде есть а HTML особенный)
Закрывание по клику в body решается крайне просто через :focus-within и небольшим скриптом, который на esc будет сбрасывать фокус.
Accessability вполне можно наваять при помощи aria-*, но это не точно, не сталкивался, не знаю, я мимокрокодил, рядомстоял, из одного уха влетела.
После долгих изысканий в дизайне и функционале в лучше просто оставить select как есть, игра не стоит свеч.
Спасибо за внимание