まとめ
- PropTypeはランタイムバリデーションはしてくれない
- vue-property-decoratorを採用してるならPropTypeを用いる意味はない
- vue+typescriptでobject-styleで書くときにのみ型推論の面で意味がある
説明
PropTypeは型推論のための、型定義です。
vue + typescriptだけども、vue-class-component(vue-property-decorator)は使わず、object-styleで開発するときにのみ意味があります。
Vue.extend({
props: {
propA: Array as PropType<Date[]>
},
methods: {
methodA() {
this.propA // ←Date[]と型推論される
}
}
});
これを、vue-class-component(vue-property-decorator)で用いることに意味はありません(と私は結論した)。
class extends Vue {
// @Prop({ type: Array as PropType<Date[]> }) propA: Date[] // こう書いても意味はなく
@Prop({ type: Array }) propA: Date[] // これでよい
methodA() {
this.propA // どっちの書き方でもDate[]推論される
}
}
まして、ランタイムバリデーションを期待して使うのはだめです。Arrayであることのチェックはしますが、中身がDateであるチェックは、 PropTypeを使ったとしてもやってくれません。
また、PropTypeについては、公式ドキュメントも皆無です。
記事を書いたときの環境
vue: 2.6.11