5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PropTypeは何もしてくれない

Last updated at Posted at 2020-04-07

まとめ

  • 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

参考

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?