【问题标题】:New issue after refactoring my code: "Invalid prop: type check failed for prop"重构我的代码后的新问题:“无效的道具:道具的类型检查失败”
【发布时间】:2021-06-18 00:00:18
【问题描述】:

我正在使用 vue-property-decorator 属性在 Vue.js 2 中使用 Typescript 编写应用程序。我最近决定重构我的大部分代码,现在每次我通过 @Prop 装饰器将绑定属性传递给我的 vue 组件时,我都会收到一条错误消息,如下所示:

Invalid prop: type check failed for prop "pager". Expected PagerSettings, got Object 

所有这一切最糟糕的部分是应用程序仍然可以正常运行,它只是向我的浏览器控制台抛出一个丑陋的错误消息。如果我将我的属性更改为键入“any”,那么一切都会完美无误,但这首先违背了使用 Typescript 的全部目的。

我针对同一个问题搜索了一堆答案,而解决方案始终是“你没有通过你认为你正在通过的东西”。我有 99% 的把握不是这样的。无论类型如何,我传递给组件的每个道具都会发生这种情况。在我从样板模板开始一个新项目并将我的所有代码带回后,这开始发生了。

我的 tsconfig.json 完全一样,据我所知,我的 package.json 中的所有版本都与之前的项目相匹配。我开始查看 vue.config.js,它几乎与一些细微的变化相同,但不会影响变量通过 @Prop 指令的方式。

以前有没有其他人经历过这种情况?我还能看什么来弄清楚为什么会发生这种情况?

【问题讨论】:

  • 你能用道具添加一个你的组件的例子吗?另一个是你传递道具吗
  • @larizzatg 不确定我是否可以轻松复制此内容。我的组件代码与更新所有样板文件之前的代码完全相同,并且运行良好。唯一不同的是我初始化 VueJS 应用程序和我的 vue.config.js 文件的方式。 VueJS 配置中有什么可以实现的吗?是否有某种类型的严格检查我以前没有做过,但现在有?
  • 如果您不提供minimal reproducible example,您希望其他人如何解决您的问题? "... 和以前一模一样" 对尝试调试您的代码的任何人来说并没有太多帮助。他们将如何测试任何潜在的修复?使用 codesanbox.io 或类似的。并确保它重现错误。
  • 我要做的是创建一个简单的组件,如果我可以重现问题,有时使用代码沙箱或代码笔
  • 复制/粘贴您的package.json 到codesandbox.io。然后,您将拥有完全相同的环境,因为您安装了相同的软件包。

标签: typescript vue.js vuejs2


【解决方案1】:

我仍然不确定为什么会突然发生这种情况,但我能够找到解决方法。最初我是这样声明我的道具的:

import { Vue, Component, Prop } from 'vue-property-decorator';

@Component({})
export default class Pagination extends Vue {

    @Prop()
    public pager: Pager;

}

我通过定义这样的类型来让它工作

import { Vue, Component, Prop } from 'vue-property-decorator';
import { PropType } from 'vue';

@Component({})
export default class Pagination extends Vue {

    @Prop({ type: Object as PropType<Pager> })
    public pager: Pager;

}

【讨论】:

  • 你用的是什么版本的vue?
  • @larizzatg vue 2.6.12 和 vue-property-decorator 8.4.2。
  • 所以我是 vue+ts 的新手,最近将它与 vue-3 + 组合 API 一起使用,所以我并没有真正使用类语法,在 tutos 中我总是看到 PropType 通用对象道具,但在 SO 中搜索似乎这是在以前的版本中添加的,另一种方法是在组件装饰器中声明道具stackoverflow.com/questions/50890810/…
  • @larizzatg 很高兴知道,谢谢!我想知道如果我在那里声明它是否会有同样的问题。我不知道我是否喜欢它的外观。像这样在类中定义我的所有属性让我感觉很好。我来自 C# 背景,所以当 JavaScript 感觉相似时,它非常棒。
猜你喜欢
  • 2017-07-31
  • 2017-07-11
  • 2021-09-15
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 2019-05-17
  • 1970-01-01
相关资源
最近更新 更多