Vue.js 2.5.16 中 Number/String 的 props 行为不一致

蔡佳峰*_*蔡佳峰 2 javascript vue.js nuxt.js

这对我来说是一个长期存在的问题,假设我有一个父组件和子组件。

// parent
<div>
  // passing a dynamic value
  <child :param="timestamp"/>
</div>

// Child
props: {
  param: {
    type: Number,
    required: true,
  }
},
Run Code Online (Sandbox Code Playgroud)

当参数值传递给子组件时,它应该通过验证。

但是,它显示错误

type check failed for prop "param". Expected Number, got String.

如果我将类型更改为String,它仍然显示错误,但以相反的方式

type check failed for prop "param". Expected String, got Number.

希望知道如何解决这个问题,谢谢。

=================================================== =======================

抱歉,在第一个示例中没有很好地解释。

因此,在我的代码库中,我将变量传递给子组件,值的类型始终是Number,假设它是一个时间戳,所以当我传递该值时,总是出现不一致的错误,这真的让我很困惑。

同时,我使用v-bind因为我将动态变量传递给子组件。

Dom*_*nic 8

我遇到了同样的问题,只是通过在 prop 定义中传递两种可能性来解决它,所以而不是

props: {
     myprop: Number, 
     [..]
}
Run Code Online (Sandbox Code Playgroud)

我说可能两者兼而有之:

props: {
    myprop: [String, Number],
    [..]
}
Run Code Online (Sandbox Code Playgroud)

我意识到如果 prop 值必须完全属于某种类型,这可能不是一个干净的解决方案,但我想我还是把它留在这里。