🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

1844閲覧

Vue.js×TypeScriptのpropsで型定義していないデータが渡された場合、エディタ上でエラーが発生するようにしたい

im05ttbbh

総合スコア18

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

1クリップ

投稿2021/02/27 01:50

編集2021/02/27 23:01

実現したいこと

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だとこの場合エラーが出ることを確認したので、言語仕様の問題か、判断がついておりません。
お手数をおかけし大変恐縮ですが、何卒宜しくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

お使いのエディターが分かりませんが、VSCode+Plugin(Vetur)と想定してコメントします。

https://vuejs.github.io/vetur/guide/linting-error.html#linting

Linting TypeScript
TSLint is not available yet.

とのこと。私もこの機能を待っております。

投稿2021/02/27 16:44

gambaldia

総合スコア266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

im05ttbbh

2021/02/27 23:03

おっしゃるとおり、エディタはVSCode+Plugin(Vetur)です。質問時に記載が抜けており申し訳ございませんでした。 現状この機能はサポートされていないということですね。お忙しい中、ご回答をいただき誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問