Vue-cliでvueとtypescriptの環境を作成しました。
vueコンポーネントの中で、メソッドから変更できるpropsを用意したのですが、次の様なエラーが発生します。
bash
119:12 Cannot assign to 'totalNumber' because it is a read-only property. 2 17 | methods: { 3 18 | increment(): void { 4 > 19 | this.totalNumber += 1; 5 | ^ 6 20 | } 7 21 | }, 8 22 | computed: { 9
ビルド自体は出来るのですが、ESLintのreadOnlyが解決できません。
何か設定し忘れがあるのでしょうか?
環境
開発で使用しているモジュールのバージョンは次の通りです。
今回の問題に関係しそうなモジュールを抽出しました。
モジュール | バージョン |
---|---|
vue | ^2.6.11 |
typescript | 3.9.7 |
eslint | ^6.7.2 |
eslint-plugin-prettier | ^3.1.3 |
eslint-plugin-pug | ^1.2.2 |
eslint-plugin-vue | ^6.2.2 |
package.json
json
1{ 2 "name": "sample-form", 3 "version": "0.1.0", 4 "private": true, 5 "scripts": { 6 "serve": "vue-cli-service serve", 7 "build": "vue-cli-service build", 8 "lint": "vue-cli-service lint" 9 }, 10 "dependencies": { 11 "core-js": "^3.6.5", 12 "vue": "^2.6.11", 13 "vue-class-component": "^7.2.3", 14 "vue-property-decorator": "^8.4.2" 15 }, 16 "devDependencies": { 17 "@typescript-eslint/eslint-plugin": "^2.33.0", 18 "@typescript-eslint/parser": "^2.33.0", 19 "@vue/cli-plugin-babel": "~4.4.0", 20 "@vue/cli-plugin-eslint": "~4.4.0", 21 "@vue/cli-plugin-typescript": "~4.4.0", 22 "@vue/cli-service": "~4.4.0", 23 "@vue/eslint-config-prettier": "^6.0.0", 24 "@vue/eslint-config-typescript": "^5.0.2", 25 "eslint": "^6.7.2", 26 "eslint-plugin-prettier": "^3.1.3", 27 "eslint-plugin-pug": "^1.2.2", 28 "eslint-plugin-vue": "^6.2.2", 29 "html": "^1.0.0", 30 "html-webpack-pug-plugin": "^2.0.0", 31 "prettier": "^1.19.1", 32 "pug": "^3.0.0", 33 "pug-plain-loader": "^1.0.0", 34 "raw-loader": "^4.0.1", 35 "stylus": "^0.54.8", 36 "stylus-loader": "^3.0.2", 37 "typescript": "~3.9.3", 38 "vue-template-compiler": "^2.6.11" 39 } 40} 41
ソース
ボタンを押すとカウントアップする様なアプリケーションを作成しています。
TotalNumberコンポーネント
typescriptでコンポーネントを書いています。
コンポーネントの記述はVue.extend()
でコンポーネントの処理を書いています。
ご共有までに、
プロパティを設定するときに、readonlyの設定はしていないですし、
コンパイル後のソースでは動いています。
<template lang="pug"> div p いいね({{ halfNumber }}) button(@click="increment") +1 </template> <script lang="ts"> import Vue from "vue"; export default Vue.extend({ props: { totalNumber: { type: Number, default: 10 } }, methods: { increment(): void { // ここの処理でエラーが発生する this.totalNumber += 1; } }, computed: { halfNumber(): number { return this.totalNumber / 2; } } }); </script> <style lang="stylus" scoped> div border 1px solid blue </style>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。