質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.31%
Vue.js

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

TypeScript

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

Q&A

解決済

2回答

6036閲覧

TypeScript "Property ~ is missing in type '{}' but required in type" というエラーについて

退会済みユーザー

退会済みユーザー

総合スコア0

Vue.js

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

TypeScript

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

0グッド

0クリップ

投稿2022/03/03 06:48

要領を得ない質問でしたら申し訳ございません。

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 :

すると今度は、「_headerprivate なメンバーなので、アクセスできません」という感じのエラーが出ました。

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 な変数含む)を使いたい場合、どのようにすれば良いのでしょうか?

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

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

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

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

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

guest

回答2

0

partial〈SideNavbarViewModel〉
で、オプションプロパティの型で指定したら上手くいかないですか?

投稿2022/03/03 09:40

shu1234

総合スコア4

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

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

退会済みユーザー

退会済みユーザー

2022/03/07 06:47

無知で申し訳ないのですが、いまいち内容を掴めていなので、使い方とかが載っているURLとか教えていただけますでしょうか?
guest

0

ベストアンサー

SideNavbarViewModelのようなクラス( private な変数含む)を使いたい場合、どのようにすれば良いのでしょうか?

コンストラクタで初期化してみてはどうでしょうか。

投稿2022/03/03 09:05

maisumakun

総合スコア146550

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

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

退会済みユーザー

退会済みユーザー

2022/03/07 06:37

出来ました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問