angular 2.でTypeScriptを使用するのは初めてです。angular 2-cli。のバージョン1を使用しています。コンパイル時に、 Assignment [] "型に割り当て可能です。これまでデータ型を調べましたが、問題ないように見えますが、エラーの正確な内容はわかりません。ご協力ありがとうございます。
data.tsファイル-これらは、配列に表示される2つのアイテムです
export const Assignments: Assignment[] = [
{
"a_type": "one",
"a_title": "Assignment 1",
"symbol": 1,
"show": false,
"tooltip": {
"left": 82
},
"buttonPos":{
"left": 130
},
"printTop": 0,
"instructions": "Instructions here",
"due_date": "sept-15.png",
"percentage": "10.png",
"taskA": {
"name": "Option A",
"a_title": "Task A",
"information": "Instructions for task A",
"selectA": true
}
}, {
"a_type": "two",
"a_title": "Assignment 2",
"symbol": 2,
"show": false,
"sub_a_title": "Assignment Information",
"tooltip": {
"left": 200
},
"buttonPos":{
"left": 250
},
"printTop": 250,
"instructions": "Instructions here",
"due_date": "29.png",
"percentage": "10.png",
"taskA": {
"a_title": "Assignment 2 info",
"name": "Option A",
"information": "Instructions for task A",
"selectA": false
},
"taskB": {
"a_title": "Assignment 2 info",
"name": "Option B",
"information": "Instructions for task B",
"selectB": false
}
}
]
assignment.ts-ここにデータ型があります
export class Assignment {
a_type: string;
a_title: string;
symbol: any;
show: boolean;
tooltip: any;
left: number;
buttonPos:any;
printTop: number;
instructions: string;
due_date: string;
percentage: string;
taskA: any;
name: string;
information: string;
selectA: boolean;
taskB: any;
selectB: boolean;
}
オブジェクトリテラルの構造がAssignment
構造と一致しないためです。
TypeScriptは構造的に型付けされています。つまり、型を使用する場合は、構造体が型と一致する必要があります。これは、オブジェクトリテラルを作成してAssignment
sを作成する場合、そのリテラルには型のすべてのプロパティが必要であることを意味します。
私が間違っていると思ういくつかのこと
name
とinformation
が欠落しているのは、typeA
にネストされているためです。 Assignment
で定義されているように、メイン構造内にある必要があるため、これは機能しません。
最初のオブジェクトにtaskB
が必要です
オブジェクトのメイン構造からselectA
とselectB
が欠落しています。
おそらく他にもありますが、うまくいけば、あなたはポイントを得る
オプションにする場合は、?
演算子
interface Assignment {
name?: string;
}
ネストが必要な場合は、それもできます
interface Assignment {
taskA?: { name: string },
taskB?: { name: string }
}
エラーは非常に明確です:
プロパティ 'left'がありません...
Assignment
クラスはleft
という名前のメンバーを宣言しますが、両方のjsonオブジェクトにはそれがありません。
jsonオブジェクトにはまだ設定していないプロパティがいくつかあります。 プレイグラウンドでの作業バージョンです 。
必要に応じて、プロパティをオプションとして宣言できます。
class Assignment {
a_type?: string;
...
}
しかし、エラーがなくても問題があります。
クラスAssignment
のインスタンスを作成するのではなく、クラスプロパティに一致するオブジェクトのみを作成します。
TypeScriptが ダックタイピング を使用しているため機能しますが、Assignment
にメソッドがある場合、オブジェクトにはそれらがありません。
あなたはこれを行うことができます:
export const Assignments: Assignment[] = [new Assignment(), new Assignment()];
Object.assign(Assignments[0], FIRST_JSON_OBJ);
Object.assign(Assignments[1], SECOND_JSON_OBJ);
または、Assignment
にこのjsonオブジェクトを受け取り、それ自体を初期化するコンストラクターを作成できます。