[解決済み] 型 '{}' は型 '{ title: string; text: string; }' に代入できません。
2022-01-31 09:31:48
質問
以下のTypeScriptのコードで、以下のエラーが発生します。
<ブロッククオートタイプ '{}' はタイプ '{ title: string; text: string; }' に割り当てることができません。プロパティ 'title' がタイプ '{}' にありません。
私は以下のように記事を宣言しています。
article: { title: string, text: string } = {};
その理由と解決方法を教えてください。ありがとうございました。
import { Component } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'article-editor',
template: `
<p>Title: <input [formControl]="titleControl"></p>
<p>Text: <input [formControl]="textControl"></p>
<p><button (click)="saveArticle()">Save</button></p>
<hr />
<p>Preview:</p>
<div style="border:1px solid #999;margin:50px;">
<h1>{{article.title}}</h1>
<p>{{article.text}}</p>
</div>
`
})
export class ArticleEditorComponent {
article: { title: string, text: string } = {};
titleControl: FormControl = new FormControl(null, Validators.required);
textControl: FormControl = new FormControl(null, Validators.required);
articleFormGroup: FormGroup = new FormGroup({
title: this.titleControl,
text: this.textControl
});
saveArticle() {
if (this.articleFormGroup.valid) {
this.article = this.articleFormGroup.value;
} else {
console.log('Missing field(s)!');
}
}
}
解決方法は?
コンパイラに
article
は、型
{ title: string, text: string }
が、空のオブジェクトを割り当てた場合(
{}
の両方を欠いたものです。
title
と
text
というように、コンパイラが文句を言う。
タイプアサーションを使って、コンパイラに大丈夫だと伝えることができます。
let article: { title: string, text: string } = {} as { title: string, text: string };
また、それを型の別名に入れることもできます。
type MyType = { title: string, text: string };
let article: MyType = {} as MyType;
そして、タイプアサーションを使用しているので、単純にできます。
let article = {} as MyType;
関連
-
[解決済み] @viewChildが機能しない - プロパティnativeElementがundefinedで読み込めない
-
[解決済み] Angular "未定義のプロパティ 'subscribe' を読み取ることができません".
-
[解決済み] LegendItemComponent をカスタマイズする Angular 用 kendo-ui
-
[解決済み] 未定義のプロパティ 'filter' を読み取ることができません。
-
[解決済み] Angular 2のコンポーネントプロパティにデフォルト値を設定する方法は?
-
[解決済み] モジュール 'AppModule' によってインポートされた予期しないディレクティブ 'LoginComponent' があります。NgModuleアノテーションを追加してください。
-
[解決済み] Angular 4 - "BrowserAnimationsModule "または "NoopAnimationsModule "のいずれかをアプリケーションに組み込んでください。
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み】TypeScriptの "not assignable to parameter of type never "エラーとは?
-
[解決済み】Typescript Type 'string' はタイプに割り当てられない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Angular 6 エラー表示から 'mat-form-field' は既知の要素ではありません。
-
[解決済み】Angularのエラーです。NgModuleアノテーションを追加してください。
-
[解決済み] Visual Code で未定義のプロパティ 'thisCompilation' を読み取ることができません。
-
[解決済み] Angular 2 ルーターベースなし href = "/stock/stock_detail.html?
-
[解決済み] Angular 8 NgForはArray errorやAcces Control Allow originなどのIterableへのバインディングのみをサポートしています。
-
[解決済み] Angular 2.0 翻訳パイプが見つかりません。
-
[解決済み] "rxjs" observable.throw は関数ではありません - Angular4
-
[解決済み] 安全でない値」の例外を発生させずに <iframe src="..."> を設定するにはどうしたらよいですか?
-
[解決済み] ローカルのワークスペース・ファイル('angular.json')が見つかりませんでした。しかし、同じコードが別のコンピュータで動作します
-
[解決済み] Angular 2 : NgModule のメタデータが見つかりません。