Vue.jsでInvalid prop(Expected Number, got String.)

環境

  • vue 2.4.3

現象

コンポーネントから子コンポーネントにプロパティを渡した際に、バリデーションに引っかかる。

// console
[Vue warn]: Invalid prop: type check failed for prop "value". Expected Number, got String.
// parent.js
<template>
    <div>
        <slider value="50"></slider>
    </div>
</template>

<script>
import Slider from './slider.vue'

export default {
    components: {
        'slider': Slider,
    },
}
</script>
// slider.js
<template>
    <input type="range" :value="value">
</template>

<script>
export default {
    props: {
        value: {
            type: Number,
            default: 0,
        }
    },
}
</script>

対策

動的なプロパティ(v-bind)にする。

// parent.js
<template>
    <div>
        <slider :value="50"></slider>
    </div>
</template>

なるほど。 https://jp.vuejs.org/v2/guide/components.html#リテラル-vs-動的