2017-02-20 23 views
0

Если у меня есть родитель и ребенок машинопись объекты:Определение JSON подтипов в машинописи

class Parent { 
    private parentField: string; 
} 

class Child extends Parent { 
    private childField: string; 
} 

Теперь я получаю через службу отдыха список JSon объектов обоих типов.

Обычно, когда я получаю объект json, я просто сопоставляю его с объектом машинописного текста, копируя все атрибуты. Но в этом случае это не так просто, потому что я не знаю, к какому объекту я отношусь (это может быть родитель или ребенок)

Каков наилучший способ сопоставления типа и подтипов json в машинописи?

ответ

3

Во-первых, когда вы получаете json, он не содержит объект типа, который вы разместили. У вас есть классы, а jsons - объекты.
Если вы хотите напечатать то, что вы получите от JSON тогда:

interface Parent { 
    parentField: string; 
} 

interface Child extends Parent { 
    childField: string; 
} 

И тогда это хорошо:

let json = { parent: { parentField: "a" }, child: { parentField: "a", childField: "b" } }; 
let parent: Parent = json.parent; 
let child: Child = json.child; 

Если вы используете классы, то вам необходимо:

let parent = Object.assign(new Parent(), json.parent); 
let child = Object.assign(new Child(), json.child); 

Чтобы рассказать о разнице, используйте a type guard:

+0

В этом случае вы действительно знаете, что получаете. Я прошу более общий способ сделать это, так как я получаю список объектов, а не объекты по их собственным – iberbeu

+0

@iberbeu, для чего вам нужен более общий способ? Не можете ли вы просто вызвать 'isChild()' для каждого объекта в массиве? –

+0

Хранитель типа - это проверка времени выполнения, чтобы различать типы, а также сообщает компилятору, что объект имеет определенный тип. Что может быть более общим, чем это? –

Смежные вопросы