2016-10-16 24 views
6

Açısal 2 ile typescript kullanıyorum. Açısal 2-cli'nin 1. sürümünü kullanıyorum. Derlerken, "Assignment []" yazısına atanamaz. Veri türlerine baktım ve şu ana kadar iyi görünüyor, ancak hatanın tam olarak ne olduğundan emin değilim. Yardım ettiğin için teşekkür ederim.Typescript: error yazmak için atanılamaz

Konsoldaki hatanın bir fotoğrafı. enter image description here

data.ts dosyası - bu dizide

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 görünen öğe ikisidir - burada

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

cevap

8

It veri tipleri bulunuyor Nesne değişmezlerinin yapısı, Assignment yapısına uymuyor.

Typescript yapısal olarak yazılmıştır, yani bir tür kullanmak istiyorsanız, yapının türle eşleşmesi gerekenden daha fazla demektir. Bu, nesne hazırlıkları yaparak Assignment s yapmak istiyorsanız, söz konusu dosyaların türdeki tüm özelliklere sahip olması gerektiği anlamına gelir.

birkaç nokta onlar typeA iç içe olduğunuz için name ve information kaçırıyorsunuz demektir

  1. yanlış görüyoruz. onlar ana yapıda olması gerekir olarak bu Assignment

  2. tanımlanan budur gibi bu

  3. Ana den selectA ve selectB kaçırıyorsunuz demektir İlk nesneye taskB ihtiyaç çalışmıyor nesnelerin yapısı. Eğer yapabileceğiniz iç içe istediğiniz takdirde

Orada başka şeyler muhtemelen, ama isteğe bağlı şeyler yapmak istiyorsanız umarım noktası

olsun, sen ? operatörü

interface Assignment { 
    name?: string; 
} 

kullanabilirsiniz o kadar

+0

Bunu işaretlediğiniz için teşekkür ederiz. Veri yapılarımı düzenledim ve artık daha fazla hata alamıyorum. – LadyT

1

Hata oldukça açık:

Mülkiyet

Sizin Assignment sınıf left adında bir üyeyi beyan ama json nesneleri ikisi de yok ... eksik 'sol'.
Json nesnesinde ayarlamamış birkaç başka özelliğiniz var, here's a working version in playground.

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

Ama hatasız, bir sorun vardır:

Sen özelliklerini ilan edebilir isterseniz isteğe bağlıdır.
Assignment sınıfının örneklerini oluşturmuyorsanız, yalnızca sınıf özelliklerine uyan nesneler oluşturursunuz.
duck typing, typescript kullandığı için çalışır, ancak Assignment yöntemlerini kullanırsanız, nesneleriniz buna sahip olmaz.

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

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

Yoksa bu json nesnesi alır Assignment bir kurucuya sahip ve kendisini başlatılamadığı edebilirsiniz:
Bunu yapabilirsin.

+0

Bilgi ve demo için teşekkürler. Daha çok hatalarımı görüyorum. – LadyT