2017-02-07 10 views
6

は、タイプ '{}'はタイプ '{title: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)!'); 
 
     } 
 
    } 
 
}

答えて

8

あなたはarticleはタイプ{ title: string, text: string }であることをコンパイラに言いましたが、その後、あなたはtitletextの両方を欠いているので、コンパイラは文句空のオブジェクト({})を割り当てます。

あなたは、それは大丈夫だ、コンパイラに指示するタイプのアサーションを使用することができます。その後、

type MyType = { title: string, text: string }; 
let article: MyType = {} as MyType; 

そして、あなたは、型アサーションを使用しているよう:

let article: { title: string, text: string } = {} as { title: string, text: string }; 

また、タイプの別名にあることを置くことができます

let article = {} as MyType; 
+0

これは間違ったことです。そのような場合は、別の答えに示唆されているようにフィールドをオプションとして定義する方が良いです。 –

+0

@VilmantasBaranauskasそれはすべての場合に当てはまるわけではありません。必須のプロパティが必要な場合もありますが、ただちに設定する必要はありません。この方法でオブジェクトを作成し、プロパティを割り当てます。 –

4

articleには01が必要ですとtextフィールドですが、{}フィールドはありません。それを解決するには、articleに初期値が表示されている間に表示する内容によって異なりますが、最も単純な修正はフィールドをオプションにすることです:{ title?: string, text?: string }

関連する問題