- в параметры указывалось тоже самое, что в withDefaults?)
Типо
const props = defineProps<{test: string}>({test: "123"});
да, так было бы удобнее, но уже не получится, потому что если ты пишешь без TS, то пропсы как раз передаются в defineProps тут нужно новый макрос для этого заводить
Но в случае с TS сейчас там вообще нельзя указать параметры при указании интерфейса. То есть кейс свободен.
имхо, много боли идет от того, что вью зачем-то до сих пор пытается выводить рантайм типы они мало кому нужны, мало что полезного делают, но создают просто безумное количество костылей и кода, да и добавляют кучу ограничений
но иначе на TS и на JS будет разная работа, и не будет работать проверка для либ при использовании в JS проектах
просто не нужно выводить вообще рантайм типы, как это не делает ни одна другая либа либо можно это сделать отдельный либой, как это сделано в реакте
вью все еще пытается дружить с JS first решениями :D реакт у которого как раз и был изначально валидатор пропсов уже сто лет как забыл что такой плагин вообще когда-то существовал :D
и это его огромный плюс. Меня бы тут не было, если бы вью требовал компиляцию)
это да, вот как раз можно было бы сделать это отдельной маленькой либой и если кому-нибудь нужна рантайм валидация, то пусть ставят и радуются
технически - да, если опираться на одновременное указание интерфейса и рантайм-значения, то свободен, но это будет выглядеть плохо, потому что в разных сценариях они будут делать совершенно разное да и польза не прям чтоб огромная, когда уже есть withDefaults да, будет чуть удобнее, но не стоит того
Есть еще идейка: вместо описания withDefault - писать полноценный объект { test: {default: "123"} }, но type не указывать, т.к. type можно указать в дженерике.
ну это по сути то же дублирование, что у нас сейчас есть с withDefaults
нее, сейчас так тоже можно, но обязательно надо указать type и нельзя указать дженерик
т.е. сейчас можно вот так: const props = defineProps({test: {type: String, default: "123"}}) А я предлагаю для TS упростить так: const props = defineProps<{test?: string}>({test: {default: "123"}})
цель сделать так, чтобы это было максимально интуитивно и просто мне больше всего нравится вариант с обычной функцией, но это не получится нормально организовать внутри script setup export default defineComponent((p: SomeInterface) => { const props = withDefaults(p, { someProperty: ‘default value’ }); }); тут даже можно отказаться от функций для непримитивов в дефолтных значениях
хотя тогда и required отменяется параметр
но твой упрощенный вариант очень сильно похож на const props = withDefaults(defineProps<SomeInterface>(), { test: ‘123’ }) и в нем даже нет вложенности в дефолтных пропсах
а где тут валидатор встраивается?
а зачем нам валидатор?)
ну так мой вариант и валидатор учитывает
да, но нужен ли он, когда у тебя все типы объявлены в TS и чекаются при сборке?
а вдруг тип динамический
дженерики?)
а вдруг тип с сервера приходит
рантайм-валидация все равно работает только в деве и выпиливается в проде, поэтому я, если честно, почти не вижу в ней смысла если пишем без TS - да, пойдет, но с TS едва ли
в ней есть смысл, если у нас есть голые .js файлы, в которых нет TS. Они могут встраиваться в проект на TS, например.
но ведь если у нас нет TS, то мы просто можем использовать текущую сигнатуру, где все описывается прям в объекте, включая тип а если есть TS, то как раз уже можно спокойно откинуть все, кроме дефолтных значений собственно, сейчас так оно и сделано
Обсуждают сегодня