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

Vue3 TypeScript中computed访问this.searchData提示类型不存在如何解决?

问题根因与解决方案

1. 核心错误:defineComponent导入路径错误

你当前使用import { defineComponent } from "@vue/runtime-core";导入定义组件的方法,@vue/runtime-core是Vue的底层内部运行时依赖,没有携带完整的Options API类型推导逻辑,导致组件内部的data、methods等属性无法正确挂载到this的类型上,才会报searchData不存在的错误。
正确的导入路径应该是从vue根包导入:

import { defineComponent } from "vue";

2. 不需要修改全局类型声明

你添加到shims-vue.d.ts的全局类型声明代码是完全不必要的,甚至会污染全局组件实例类型,请删除这段代码。只要导入路径正确,defineComponent会自动根据你定义的data、methods、computed等配置自动推导this的类型,不需要手动全局声明。

3. 可选优化:显式标注计算属性返回值类型

为了避免隐式类型报错,你可以给filteredSearch计算属性显式标注返回值类型:

computed: {
  // 显式指定返回值为SearchDataType数组
  filteredSearch(): SearchDataType[] {
    return this.searchData.filter((filteredItem: SearchDataType) => {
      return filteredItem.name.match(this.searchQuery)
    })
  }
}

修正后完整代码

<script lang="ts">
import { defineComponent } from "vue";
import { testData } from "../assets/testData";


export type SearchDataType = {
  _id: string;
  index: number;
  name: string;
};

interface ISearchPage {
  searchData: SearchDataType[];
  searchQuery: string
}

export default defineComponent({
  name: "SearchPage",
  components: {},
  data(): ISearchPage {
    return {
      searchData: [],
      searchQuery: ''
    };
  },
  methods: {
    getData: function () {
      this.searchData = testData;
    },
  },
  created(){
    this.getData()
  },
  computed: {
    filteredSearch(): SearchDataType[] {
      return this.searchData.filter((filteredItem: SearchDataType) => {
        return filteredItem.name.match(this.searchQuery)
      })
    }
  }
});
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:54:02