Vue:无效的道具:类型

Posted

技术标签:

【中文标题】Vue:无效的道具:类型【英文标题】:Vue: Invalid prop: type 【发布时间】:2021-03-18 05:51:43 【问题描述】:

当我从后端服务获取数据时,我在 Vue 中收到多个警告:

[Vue warn]: Invalid prop: type check failed for prop "item". Expected Item, got Object 

我还有以下代码:

物品卡片

<template>
...
</template>
<script lang="ts">
import  Options, Vue  from "vue-class-component";
import  Prop  from 'vue-property-decorator'
import  Item  from "./Item";

export default class ItemCard extends Vue  
  @Prop(Item) item!: Item;

</script>

菜单

<template>
        <div v-for="category in categories" :key="category.id" class="category-wrapper">
          <h2 class="title dm-text-header"> category.title </h2>
          <h4 class="subheading "> category.description </h4>

          <ItemCard
            v-for="item in category.items" 
            :key="item.id"
            v-bind:item="item"
          >
          </ItemCard>
        </div>
</template>

<script lang="ts">
import  Restaurant  from "./Restaurant"; 

@Options(
  components: 
    ItemCard
  
)
export default class Menu extends Vue 
  ...
  restaurant: Restaurant | null = null;
  categories: Category[] = [];
  ...

  getRestaurant(): void 
    axios.get<Restaurant>(this.restaurantUrl)
    .then(res => 
      this.restaurant = res.data;
    );
  

</script>
// Restaurant
import  Menu  from './Menu';
export class Restaurant 
    menu!: Menu;


// Menu 
import  Category  from './Category';
export class Menu 
    categories!: Category[];


// Category
import  Item  from './Item';
export class Category 
    items!: Item[];


// Item
export class Item
   ...

axios 总是以object 类型返回结果(Restaurant),而不是我希望它具有的Resturant 类型。我可以通过Restaurant 访问类别/项目,但这些也已经属于object 类型,而不是预期的类型(Category/Item)。

只要显示所有内容,代码就可以正常工作,但是显示了很多警告,所以我认为我做错了什么。为了解决这些警告,我需要更改哪些地方和哪些内容?

【问题讨论】:

【参考方案1】:

使用Object as PropType&lt;Item&gt;:

import  PropType  from 'vue';

export default class ItemCard extends Vue 
  @Prop(Object as PropType<Item>) item!: Item;

【讨论】:

答案中的链接指向 Vue 中 TypeScript 支持的文档。它包括一个Recommended configuration 部分,这应该是您所需要的。

以上是关于Vue:无效的道具:类型的主要内容,如果未能解决你的问题,请参考以下文章

vue 警告:无效的道具:道具“modalState”的类型检查失败。预期布尔值,得到函数

如何将 ref 作为道具传递:[Vue 警告]:无效的道具:道具“containerRef”的类型检查失败。预期对象,得到 HTMLDivElement?

[Vue 警告]:无效的道具:道具“值”的类型检查失败。预期的数组,得到值为 1 的数字

Vue.js - 无效的道具:道具“src”的类型检查失败。预期的字符串,对象,得到了 Promise

Vuejs 错误,无效的道具:道具的类型检查失败。预期日期,得到数值

Vue Utils 无效的道具