Проблема с типами с ts, useStorage (vueuse) и Pinia

Я получаю странную ошибку в следующем коде: Property 'length' does not exist on type '{ [RefSymbol]: true; }'.

Но когда я проверяю тип fooв функции getCount моя IDE сообщает мне, что это тип Foo[]. Что я делаю не так?

      import { defineStore } from 'pinia';
import { useStorage } from '@vueuse/core';

interface Foo {}

export const useFooStore = defineStore('foo', {
  state: () => ({
    foo: useStorage('foo', [] as Foo[]),
  }),
  actions: {
    getCount() {
      return this.foo.length; //Here's the error
    },
  },
});

3 ответа

Я думаю, что возвращаемое значение useStorageэто не то, что вы думаете. Я считаю, что он возвращает своего рода ссылку с valueсвойство, содержащее фактически сохраняемые данные.

Пытаться:

      useStorage('jobs', [] as Job[]).value

Теперь в вашем сообщении не очень много информации, но из того, что говорится в сообщении об ошибке, я бы предположил следующее. Вы определяете объект с типом

      { [RefSymbol]: true; }

но поскольку для вашего типа длина не существует, я думаю, что для работы ожидается массив?

Когда я добавляю строку с ошибкой с помощью

      /* eslint-disable @typescript-eslint/ban-ts-comment */
// @ts-ignore
return this.foo.length; //Here used to be the error

Потом вдруг работает. Это чертовски уродливо, но это работает

Другие вопросы по тегам