плюсы: typescript минусы: typescript
такие же, как и при использовании TS без вью
Ну т.е., нет такого, что какие-то вещи плохо поддерживаются и т.д.? Читал доку vue, там про ограничения при использовании пропсов было. Поэтому интересно, усложнит ts процесс разработки или нет
смотря какая версия vue3 последний минор неплохо прокачал еще дальше поддержку TS-а во vue до нее были некоторые сложности
ограничение есть, да пропсы - это, наверное, единственный неудобный момент на TS, потому что вью зачем-то до сих пор пытается привести интерфейсы к реальным рантайм-конструкторам, что у него получается крайне плохо ну и withDefaults - тоже костыль, с этим нужно просто смириться в остальном никаких проблем нет и все хорошо поддерживается, даже слоты
мне кажется, что вью уже не сможет нормально решить эту проблему, defineProp привнесет только новую - теперь нельзя будет прописать единый интерфейс и удобно его объявить как пропсы, придется делать это по одному нормальное решение было бы отказаться от конвертирования интерфейсов в рантайм-конструкторы, ну и можно еще допилить defineComponent, чтобы возможно было что-то типа export default defineComponent((props: AnyInterface) => { /* setup */ });
мы уже малорвероятно от концепции "компилятора" уйдем
именно так, а в script setup с этим никак особо не извернуться, поэтому самое вероятное, что мы придем к деструктуризации пропсов https://github.com/vuejs/rfcs/discussions/502
бтв defineComponent буквально почти так и позволяет сейчас, но да, там другие проблемы
а вариант const propName = defineProp<Props<PropName>>() не подойдет?
вот этот пропосал мне меньше defineProp нравится
позволяет, но такой синтаксис обязывает возвращать из setup JSX/рендер-функцию, а не обычный объект
вроде и щас это работает const { code, lang, result } = defineProps<{ code: string; lang: string; result?: string }>() или это не то?
так не работает
ну вот я щас попробовал, все работает, без флагов каких-то
сейчас деструктуризация приведет к тому, что ты потеряешь реактивность и, например, в lang у тебя просто будет лежать статичная строка, а не реактивный реф
попробуй поменять снаружи пропс и увидишь, что изменения не отобразятся в дочернем компоненте
да вроде рактивно, либо я не шарю) https://play.vuejs.org/#eNp9UsFOwzAM/ZWQS0Eaq9BuXTcJ0CTgABNM4pJL1bpdRppESVomVf13nHQtE0K7xe/ZzrOfO3qv9bxtgCY0tbnh2hELrtFrJnmtlXGkIwZK0pPSqJpEmBpN1A6sO+Hz2Ae+U7RkkslcSeRqW5GVr7+OnkAIRT6VEcVVdMNkGg/f4UcYOKi1yBxgREi6v1t3XSju+zTGKKBc6saR9rZWBYgVo8gzOlBBSILACJMYiTSe2tIZdRY1lbyaH6ySOG7nKxnNVa25APOmHUfNjCYkMJ7LUPL3S8CcaWA24vke8q9/8IM9eozRrQELpgVGJ85lpgI30JuPVzjieyJxpEZg9gXyHawSjdc4pD00skDZZ3lB7XNwhstqZzdHB9KOQ3mhPrMP+YyiU48XRv+Vu5gvQh2TPW5xdPnvvRCRSb99h21w9YP9Jw/xBAoouYStUdqmAU2IdQZlLrHz+vrSPaQFb0kuMmt9+7AaRLsOm/QoKo2RH4rO7O5/AOCx9Lk=
Тут нет деструктуризации
короч то что ты написал в defineProps пропсы и так известны vue-хе и в рендере ему не нужна вообще приписка props.SMTH
реактивно, но только поэтому https://github.com/vuejs/core/blob/main/packages/sfc-playground/src/App.vue#L37 у них в сэндбоксе всегда включены все эксперименталки
Что плохого использовать объект с пропсами в темплейте? Наглядно видно откуда он пришел (если нет props. — переменная компонента)
а ты где собсно прочел что я такое написал?
странно, в своем коде на пропсы подаю другие значения, оно реактивно в интерфейсе, может это из-за hmr update складывается обманчивое впечатление
может у тебя включен экспериментальный propsDestructure в конфиге, иначе оно просто не может работать, т.к. после деструктуризации это сырое статичное значение
дефолтный конфиг при установки таури, не трогал
покажи код которым проверял
да просто в шаблоне меню у пропсов значения и оно реактивно в интерфейсе <CodeBlock code="hello" lang="javascript" result="alert('hello bro')" /> в компоненте CodeBlock const { code, lang, result } = defineProps<{ code: string; lang: string; result?: string }>()
Обсуждают сегодня