代码之家  ›  专栏  ›  技术社区  ›  Audiosleef

在阵列角5中添加两种不同类型的对象

  •  0
  • Audiosleef  · 技术社区  · 6 年前

    我有两种不同的阵法,英雄:英雄[]和怪物:怪物[]。他们有一个共同的领域,叫做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{
    
    }
    

    我没有在参与者中添加公共字段,因为我有一个英雄和一个怪物组件,我需要这些公共属性来添加一个新的英雄/怪物。

    现在我需要调整我的遭遇模型,使它由一个参与者[]组成,该参与者持有英雄[]和怪物[]

    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 回复  |  直到 6 年前
        1
  •  1
  •   Fenton    6 年前

    数组的类型必须是 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);
    
        2
  •  1
  •   bugs    6 年前

    两个 Hero S和 Monster S也是 Participant S,所以你可以简单地说 participants 是一个数组 参与者 元素。

    participants: Participant[] = [];