実現したいこと
Vue.jsのpropsで型定義したもの以外のデータが渡された場合、エディタ上でエラーが発生するようにしたい
状況
以下のコードのようにpropsの型をenumのような形で定義し、外から定義以外のものを渡した際、エディタ上でエラーや警告が発生しませんでした。
type ButtonColor = 'primary' | 'info' | 'success' | 'warning' | 'danger' | 'simple'
今回はわかりやすく、
:color="'succsssesssss'"
とあからさまに誤った値を渡して検証しております。
なお使用エディタはVSCode+Plugin(Vetur)です。
該当のソースコード
【Button.vue】
Vue
1<template> 2 <md-button :class="`md-${color}`"> 3 <slot /> 4 </md-button> 5</template> 6 7<script lang="ts"> 8import Vue, { PropType } from 'vue' 9 10type ButtonColor = 'primary' | 'info' | 'success' | 'warning' | 'danger' | 'simple' 11 12export default Vue.extend({ 13 name: 'Button', 14 props: { 15 color: { 16 type: String as PropType<ButtonColor>, ←定義された型を使用 17 default: null, 18 }, 19 }, 20}) 21</script>
【Sample.vue】
Vue
1<template> 2 <div> 3 <Button :color="'succsssesssss'" /> ←ここでエディタ上で警告が出ない 4 </div> 5</template> 6 7<script lang="ts"> 8import Button from './Button.vue' 9import Vue from 'vue' 10 11export default Vue.extend({ 12 name: 'Sample', 13 components: { Button }, 14}) 15</script> 16
試したこと
propsの型定義の書き方を変更
『type: String as PropType<ButtonColor>
という書き方がそもそも違うのか・・?』と考え、以下のように書き方を変えてみましたが、結果は変わりませんでした。
【Button.vue】
Vue
1<template> 2 <md-button :class="`md-${color}`"> 3 <slot /> 4 </md-button> 5</template> 6 7<script lang="ts"> 8import Vue, { PropType } from 'vue' 9 10type ButtonColor = 'primary' | 'info' | 'success' | 'warning' | 'danger' | 'simple' 11 12export default Vue.extend({ 13 name: 'Button', 14 props: { 15 color: { 16 type: String as () => ButtonColor, ←ここの書き方を変更 17 default: null, 18 }, 19 }, 20}) 21</script>
この他にも、
Vue
1 type: String as PropType<'primary' | 'info' | 'success' | 'warning' | 'danger' | 'simple'>,
このような書き方でも結果は変わりませんでした。
ご教示いただきたいこと
外から定義外のpropsを渡した際のエディタ上での警告の出し方
書き方が誤っているか、Reactだとこの場合エラーが出ることを確認したので、言語仕様の問題か、判断がついておりません。
お手数をおかけし大変恐縮ですが、何卒宜しくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/27 23:03