как достать label для item определенного типа. То есть если в качестве item в селект приходит Юзер, селект понимает что нужно вытащить name, для типа Symbol - дескрипшен, для примитивов - вернуть значение, преобразованное в строку. Самому в голову приходит решение с классами, но как-то не особо оптимально выходит для каждого item создавать новый инстанс его класса. Есть у кого идеи как это можно реализовать?
Перегрузками?
Хм. Да, можно сделать перегрузку getLabel. Но тогда, если нужно будет заставить селект работать с новым для себя типом, нужно будет добавить новую функцию getLabel в его скоуп. Не вписывается в SOLID, а конкретно в букву О) но вариант неплохой, спасибо
По солиду, видимо, можно сделать только с использованием классов?
Может быть, ts декораторы?
Почему нарушается-то? Принцип говорит о том, что можно расширять поведение, но нельзя изменять. Если стандартный компонент умеет автоматически показывать несколько стандартных типов данных, а с помощью аргумента можно добавить поддержку собственного - это вполне соответствует open/closed principle
Так а если просто пробрасывать снаружи пропсой геттер для лейбла? Вида ‘getLabel: (item: T) => string’
Обсуждают сегодня