
要領を得ない質問でしたら申し訳ございません。
Vue.js と TypeScript 使い始めたところなのですが、タイトルのエラーが発生して「よくわからん」となっています。ご教授いただければ幸いです。
vue-cliで作成したサーバーのコンソール上で発生しています。
基本的なtypescript のエラーではないかと思っています。
該当のソースコード
C#などの知識で、
ts
1export interface ISideNavbarItemViewModel { 2 header: string; 3 items?: ISideNavbarItemViewModel[]; 4} 5 6class SideNavbarItemViewModel implements ISideNavbarItemViewModel { 7 private _header: string = ""; 8 get header(): string { 9 return this._header; 10 } 11 set header(value: string) { 12 this._header = value; 13 } 14 15 private _items?: SideNavbarItemViewModel[]; 16 get items(): SideNavbarItemViewModel[] | undefined { 17 return this._items; 18 } 19 set items(value: SideNavbarItemViewModel[] | undefined) { 20 this._items = value; 21 } 22} 23 24export class SideNavbarViewModel { 25 private _header: string = ""; 26 get header(): string { 27 return this._header; 28 } 29 set header(value: string) { 30 this._header = value; 31 } 32 33 private _items?: SideNavbarItemViewModel[]; 34 get items(): SideNavbarItemViewModel[] | undefined { 35 return this._items; 36 } 37 set items(value: SideNavbarItemViewModel[] | undefined) { 38 this._items = value; 39 } 40}
を作成しました。
上記のクラスSideNavbarViewModel
を使ってオブジェクトを作成したい場面で、エラーが発生します。
vue
1 : 2<script lang="ts"> 3import { SideNavbarViewModel } from "../modules/SideNavbarModels"; 4import { Component, Vue } from "vue-property-decorator"; 5 6@Component 7export default class About extends Vue { 8 : 9 private sideNavbarData: SideNavbarViewModel = { 10 header: "hoge", 11 items: undefined, 12 } 13 : 14} 15</script> 16
該当のエラーメッセージ
上記コードで実行すると、以下のメッセージが発生します。
115:11 Property '_header' is missing in type '{ header: string; items: undefined; }' but required in type 'SideNavbarViewModel'. 113 | } 114 | > 115 | private sideNavbarData: SideNavbarViewModel = { | ^ 116 | header: "hoge", 117 | items: undefined, 118 | } Version: typescript 4.1.6 Time: 177ms
メッセージ的には「_header
の記述が足りない」という感じに見えます。
private
で宣言しているので、外部アクセスできないと思っていました。
(そもそも、アクセスしたくないので private
宣言している訳ですが・・・)
「要領を得ないが、_header
も記述すればいいのか」
と思い、試しにソースを以下のように変更して実行しました。
vue
1 : 2 private sideNavbarData: SideNavbarViewModel = { 3 _header: "", 4 header: "hoge", 5 items: undefined, 6 } 7 :
すると今度は、「_header
は private
なメンバーなので、アクセスできません」という感じのエラーが出ました。
115:11 Type '{ _header: string; header: string; items: undefined; }' is not assignable to type 'SideNavbarViewModel'. Property '_header' is private in type 'SideNavbarViewModel' but not in type '{ _header: string; header: string; items: undefined; }'. 113 | } 114 | > 115 | private sideNavbarData: SideNavbarViewModel = { | ^ 116 | _header: "", 117 | header: "hoge", 118 | items: undefined, Version: typescript 4.1.6 Time: 3962ms
これは、望んでいるエラーではあります。
わからないこと
SideNavbarViewModel
のようなクラス(private
な変数含む)を使いたい場合、どのようにすれば良いのでしょうか?

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2022/03/07 06:47