You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode中ts-plugin对带setter的计算属性报错问题咨询

问题解答

1. 错误性质:类型推断误报

这是TypeScript类型检查器(配合Vue/Pinia的TS插件)的误报。

运行时能正常赋值是因为你给computed配置了完整的get和set方法,属于可写计算属性;但TS类型系统在推导Pinia store的属性类型时,没能正确识别这个可写性,错误地将myValue判定为只读属性。实际代码逻辑没有问题,只是类型层面的判定偏差。

2. 消除错误提示的方案(无需全局禁用错误)

方案一:显式指定Store返回类型(推荐,从根源解决类型推断问题)

通过手动定义Store的返回类型,明确myValue是Vue的WritableComputedRef类型,让TS正确识别其可写性:

import { defineStore, ref, computed } from 'pinia';
import type { WritableComputedRef } from 'vue';

export class MyClass {
  myValue: string;
}

export const useSomeStore = defineStore('someStore', (): {
  myValue: WritableComputedRef<string>
} => {
  const myClass = ref(new MyClass());

  const myValue = computed({
    get() {
      return myClass.value.myValue;
    },
    set(value: string) {
      myClass.value.myValue = value;
    }
  });

  return { myValue };
});

方案二:单行代码抑制错误(临时应急用)

如果不想修改Store的类型定义,可以用TS的注释指令单独屏蔽该行的错误提示:

const someStore = useSomeStore();
// @ts-ignore: 忽略TS对myValue只读的误判
someStore.myValue = "hello";

或者更严谨的@ts-expect-error(适合明确知道这是TS误判的场景):

const someStore = useSomeStore();
// @ts-expect-error: TS误判myValue为只读属性
someStore.myValue = "hello";

方案三:优化类属性的类型声明(辅助类型推断)

给MyClass的属性显式添加public修饰符(虽然不是核心原因,但能帮助TS更清晰地识别属性的可写性):

export class MyClass {
  public myValue: string;
}

内容的提问来源于stack exchange,提问作者timbre timbre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:52:16