Home > database >  Type 'string' is not assignable to type 'ComputedRef<string>'
Type 'string' is not assignable to type 'ComputedRef<string>'

Time:10-27

I've got this code in my Vue app: What I want to do is change the color property based on the props. I also use computed, because the color property could change outside the component.

export default defineComponent({
  name: 'mail-dropdown',
  props: {
    title: {
      type: String,
      default: '',
      // required: true
    },
    id: {
      type: String,
    },
    shade: {
      type: String,
      default: 'white',
    },
    grey: {
      type: Boolean,
      default: false,
      // required: true
    },
    items: { type: Object as PropType<ActionItem[]> },
  },
  setup(props, context) {
    const store = useCounterStore();
    let color = computed(() => props.shade);
    if (props.grey == true) {
      color = 'grey-5';
    };
    
    return { store, color };
  },
});

I got an error here:

if (props.grey == true) {
  color = 'grey-5';
};

The error is the following:

> let color: ComputedRef<string> 
Type 'string' is not assignable to type 'ComputedRef<string>'.

What is the solution to changing the color?

CodePudding user response:

You missed to add .value :

  if (props.grey == true) {
    color.value = 'grey-5';
 };

but computed property should be writable like :

 let color = computed({
   get(){
     return props.shade
   },
  set(val){
  //emit the new val or mutate the store state
   }
  });
  • Related