Проблема с типами с 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
Потом вдруг работает. Это чертовски уродливо, но это работает