Viktor
А что, если дефолтные параметры для разных фабрик изменятся?
Viktor
Nikita
не знаю, как по мне юзание this в реакт компонентах выглядит не очень красиво
Nikita
А что, если дефолтные параметры для разных фабрик изменятся?
можешь что угодно передеать, это ведь функции
Nikita
разницы между классами в этом кейсе нету
Denis
разницы между классами в этом кейсе нету
https://www.npmjs.com/package/constructor-decorator
Denis
Классы - это и есть функции
Viktor
можешь что угодно передеать, это ведь функции
Я понял. Я в принципе работаю с тем же подходом (функции-конструкторы), только у меня функции используют destructuring входных параметров, и после объема внутренней логики возвращают public API. В принципе то же наследование и без классов тут доступно.
Denis
Конечно доступно. Но как мы видим из примеров - код короче
Viktor
На мой взгляд, это очень специфический и сжатый пример)
Denis
Скажи Никита, а если их 50, ты тоже их в одном файле будешь писать?
Denis
Но типизация конструктора - рабочая
Viktor
Код на полноценном толстом классе будет пожирнее. Я не к тому, что меня особо волнует классы или не классы. Для меня вообще принципиальной разницы нет. Просто функции-конструкторы я начал использовать чаще классов за последнее время, и выглядит это довольно естественно и беспроблемно: та же заглавно названная функция, минус конструктор, минус this
Viktor
Кстати, в rxjs7, который еще не вышел, отказались от них с целью минимизации веса бандла. В версии 6 ушли в сторону pipe(...operators) вместо .operator().operator()... из-за проблем с декомпозицией функционала в контексте классов и худшего тришэйкинга (автор библиотеки об этом рассказывал на выступлении)
Viktor
В 7й версии теперь Observable/Subject будут создаваться без new (хотя техничечки с new вернется все тот же непримитив - plain API object :) )
Dika
https://www.npmjs.com/package/constructor-decorator
с тайпскриптом это не нужно
Denis
с тайпскриптом это не нужно
Это работает в рантайме в отличие от TS
Viktor
А кстати почему нельзя все входные параметры просто засунуть в словарь
Dika
тут какая-то рантайм валидация для бедных
Denis
Мне нужна рантайм
Denis
Пользователь будет создавать классы
Dika
это не будет типизироваться
Denis
Будет
Denis
Уже типизируется
Dika
это не будет типизироваться
Я имею в виду, тс/флоу тайпинги для своей либы ты не сможешь написать.
Denis
Я и не собираюсь
Maksim
Эх, как же всякие популярные библиотеки обходятся без рантайм чекинга типов аргументов конструктора, вот дураки
Maksim
Не говори
Viktor
Я в целом думаю, что статическими типами можно покрыть внутреннюю кодовую базу проекта и быть уверенным в соответствии всех входных/выходных типов данных (у классов, методов, функций). Вот на внешние api динамические проверки уже как раз совершенно востребованы
Viktor
Ну это в целом лишь мои наблюдения
Dika
для внешних можно взять нормальные либы для валидации
Viktor
Да
Viktor
Я о том же
Viktor
А внутри если используется ts/flow, tdd, то проблем не должно быть
Denis
У меня больше половины внешних данных. Тонкий же клиент
Denis
Я не понимаю, почему все так парятся с клонированием?
Denis
Ведь javascript clone = (obj) => { const newObj = {} for (val in obj) { newObj[val] = obj[val] } return newObj }
Anonymous
https://www.npmjs.com/package/constructor-decorator
Ты придумал свой prop-types и ducktype? Зачем?
Anonymous
ничем не лучше { ...obj } или Object.assign. Я бы даже сказал хуже, так как не учитывает Symbols
Dika
Ведь javascript clone = (obj) => { const newObj = {} for (val in obj) { newObj[val] = obj[val] } return newObj }
- обычно парятся с deep clone - тут нет проверки hasOwnProperty
Denis
Ну это на коленке сходу
Denis
Знал что есть подвох))
Anonymous
Я смотрю ты любишь велосипедирование
Dika
Ну это на коленке сходу
твой код выдаст {} из new Date()
Anonymous
твой код выдаст {} из new Date()
+ регулярки он тоже не склонирует
Denis
Даже зимой катался ))
Anonymous
Но самая жеть конечно, когда пишут JSON.parse(JSON.stringify(a));
Denis
https://stackoverflow.com/a/728694
Функции это держит?
Anonymous
А вот за такое бъют долго и больно)
Denis
https://stackoverflow.com/posts/9772788/revisions
Denis
Ты придумал свой prop-types и ducktype? Зачем?
Там же в ридмихе написано зачем.
Андрей
Там же в ридмихе написано зачем.
Чем второе лучше, чем первое?
Denis
Чем второе лучше, чем первое?
Оно короче и будет выдавать ошибку при несовпадении типа
Андрей
Оно короче и будет выдавать ошибку при несовпадении типа
Оно нихрена не короче. 2 символа погоды не делает. А насчёт ошибок - сомнительная выгода, имхо. Но ладно. Каждый дрочит как он хочет.
Андрей
Но если дописать в первое проверку на типы, оно будет длинее намного
Рантайм проверка типов нужна мало где. И уж точно не в конструкторе классов.
Андрей
Но я буду создавать классы в рантайме
А для чего, если не секрет?
Dika
Но я буду создавать классы в рантайме
Почему ты не можешь взять нормальную либу для рантайм валидации?
Denis
А для чего, если не секрет?
Для того, чтобы добавлять новые звенья системы на лету.
Denis
Новые инстансы классов
Denis
В чем проблема то?
Denis
Нельзя уже new делать?
Anonymous
Проблема в том, что когда ты делаешь: class TypedEntity extends BaseClass { get args () { ... } } ты уже не можешь наследоваться от другого класса. К тому же я не могу понять зачем геттер экземпляра используется? В prop-types ты хотя бы можешь сделать так: class TypedEntity extends Component { static props = { ... } } тоже не ахти, но хотя бы более идеоматично и удобно, потому что ты можешь props вынести за пределы класса
Denis
У меня classProperties нету.
Anonymous
У меня classProperties нету.
У тебя нету бабеля, а пишешь ты для IE11?