2016-10-16 98 views
6

2型でtypescriptを使用するのは初めてです。私は2型の角度2のバージョンを使用しています。コンパイルするときに、 "Assignment []"型に割り当てられないというエラーが表示されます。私は、データ型を見て、これまでのところ大丈夫ですが、私はエラーが正確に何であるか分かりません。ご協力いただきありがとうございます。Typescript:型エラーに割り当てることはできません

ここは、コンソールからのエラーの写真です。 enter image description here

data.tsファイル - これらの配列に

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を表示される項目のうちの2つです - ここでのデータ型は、それはだ

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; 
    } 

答えて

8

ですオブジェクトリテラルの構造体がAssignment構造体と一致しないためです。

Typescriptは構造的に型付けされています。つまり、型を使用する場合は、構造体が型に一致する必要があります。つまり、オブジェクトリテラルを作成してAssignmentを作成する場合、そのリテラルはそのタイプのすべてのプロパティを持つ必要があります。

カップルの事は、私は、彼らがtypeAにネストされているので、あなたがnameinformationを逃している

  1. 間違って参照してください。彼らは主要構造にする必要があり、これはそれがAssignment

  2. で定義されているものであるとして、あなたがメインからselectAselectBを逃している第一の目的でtaskB

  3. を必要とし、動作しません。オブジェクトの構造。

あり、他のものは、おそらくですが、あなたは、物事をオプションにしたい場合は、あなたが行うことができますネストしたい場合は、うまくいけば、あなたがポイント

を取得し、あなたが?オペレータ

interface Assignment { 
    name?: string; 
} 

を使用することができますあまりにも

interface Assignment { 
    taskA?: { name: string }, 
    taskB?: { name: string } 
} 
+0

ありがとうございました。私は自分のデータ構造を修正しましたが、今はもうエラーはありません。 – LadyT

1

エラーはかなり明確です:

プロパティ

あなたAssignmentクラスはleftという名前のメンバーを宣言していますが、あなたのJSONオブジェクトの両方がそれを持っていない...不足している「左」。
jsonオブジェクトに設定していないプロパティがいくつかあります(here's a working version in playground)。

class Assignment { 
    a_type?: string; 
    ... 
} 

しかし、たとえエラーが発生することなく、あなたは問題があるが:

あなたはプロパティを宣言することができますが、あなたがしたい場合は、オプションです。
クラスAssignmentのインスタンスを作成していないため、クラスプロパティに一致するオブジェクトのみを作成します。
typescriptがduck typingを使用しているために機能しますが、Assignmentにメソッドがある場合、オブジェクトにはそのオブジェクトは含まれません。

export const Assignments: Assignment[] = [new Assignment(), new Assignment()]; 

Object.assign(Assignments[0], FIRST_JSON_OBJ); 
Object.assign(Assignments[1], SECOND_JSON_OBJ); 

をそれとも、このJSONオブジェクトを受け取りAssignmentでコンストラクタを持っているし、自分自身をintializeことができます。
あなたはこれを行うことができます。

+0

情報とデモをありがとう。私は私の間違いの多くを見ます。 – LadyT

関連する問題