core: Types don't allow refs to be assigned to reactive object properties
Version
3.0.7
Reproduction link
https://codesandbox.io/s/zealous-ptolemy-oierp?file=/src/index.ts
Steps to reproduce
- Create a reactive object, e.g. const foo =
reactive({bar: 3)} - Assign a ref to one of its properties, e.g.
foo.bar = ref(5)
What is expected?
Typescript should be fine with assigning a ref to a reactive object. It works at runtime and is even shown in the documentation: https://v3.vuejs.org/guide/reactivity-fundamentals.html#access-in-reactive-objects (the minimal reproduction I’ve linked is literally just that example)
What is actually happening?
Typescript complains that Ref<number> isn’t compatible with number
About this issue
- Original URL
- State: open
- Created 3 years ago
- Comments: 15 (8 by maintainers)
For now, I created this helper function to get around this problem. Works well but it does add a call to a useless function unfortunately.
I’m a bit confused about why this is a duplicate. That issue seems to be talking about runtime behavior (and is also related to
computed, although I guess that doesn’t necessarily matter) while I’m talking about types? Like I mentioned what I’m doing works fine at runtime, it’s strictly Typescript that forbids me from doing it. I might of course just be misunderstanding the other issue though.https://github.com/microsoft/TypeScript/issues/43826
@LinusBorg Can vue3 make auto unwrapping ref is optional via params in the future?
It’s a source of confusion, personally i prefer no auto unwrap even it’s ugly (have to write .value everytime), at least it’s clear its a ref, and i don’t have to fight/double think when assign/use it (lowering dev experience).
example of the problem:
duplicate of #1135