Добавление двух разных типов объектов в массив угловых 5 - PullRequest
0 голосов
/ 25 мая 2018

У меня есть два разных массива, герои: герой [] и монстры: монстр [].У них есть общее поле с именем totalInitiative.Эти два массива нужно поместить в один и тот же массив и отсортировать по их totalInitiative.

Цель, которую я пытаюсь достичь, заключается в следующем:

Array[hero1, hero2, hero3, monster1, monster2] 

Я создал суперкласс с именемУчастник:

import {Participant} from './participant';

export class Hero extends Participant{
id: number;
name: string;
player: string;
hitPoints: number;
armor: number;
initModif: number;
imageUrl: string;
totalInitiave: number;
}

import {Participant} from './participant';

export class Monster extends Participant{
id:number;
name: string;
hitPoints: number;
armor: number;
initModif: number;
imageUrl: string;
}

export class Participant{

}

Я не добавил общие поля в Участник, потому что у меня есть компонент Герой и Монстр, где мне нужны эти общие свойства для добавления нового Героя / Монстра.

СейчасМне нужно настроить мою модель Encounter так, чтобы она состояла из Участника [], который содержит Героя [] и Монстра []

import {Hero} from './hero';
import {Monster} from './monster';
import {Participant} from './participant';

export class Encounter {
id: number;
name: string;
participants: Participant[ Hero[] Monster[]]; //Doesn't work
}

Я даже не уверен, что это правильный путь?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

И Hero с, и Monster с также Participant с, так что вы можете просто сказать, что participants - это массив Participant элементов.

participants: Participant[] = [];
0 голосов
/ 25 мая 2018

Тип вашего массива должен быть объединением Hero и Monster:

const participants: (Hero | Monster)[] = [];

Вот сокращенный пример с элементарной сортировкой ...

class Hero {
  constructor(public initiative: number) { };
}

class Monster {
  constructor(public initiative: number) { };
  evil = 5;
}

const heroes = [
  new Hero(5),
  new Hero(3)
];

const monsters = [
  new Monster(2),
  new Monster(7)
];

const participants: (Hero | Monster)[] = heroes.concat(monsters);

const sorted = participants.sort((a, b) => a.initiative - b.initiative);

console.log(sorted);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...