在对象内部填充数组的正确方法是什么?

时间:2019-05-16 10:11:09

标签: arrays typescript object

我想制作一个装饰工,您可以从中选择艺术品。因此,我想将这张卡片的所有可能性添加到我的对象中,以便以后处理。

class Card_possibilities {
    public id: number;
    public cardname: string;
    public edition: string;
    constructor(id: number, cardname: string, edition: string) {
        this.id = id;
        this.cardname = cardname;
        this.edition = edition;
    }
}
class Deck_List{
    id: number;
    cardname: string;
    quantity: number;
    _possibilities: Card_possibilities[];
    constructor(id: number, quantity: number, cardname: string, _possibilities: Card_possibilities[]=[]) {
        this.id = id;
        this.quantity = quantity;
        this.cardname = cardname;
    }
    public set possibilities(CardArray: Card_possibilities[]){
        this._possibilities = CardArray;
     }
}
let cardnames_obj: Deck_List=new Deck_List(43,2,"Cancel");

let singleCard1:Card_possibilities= {id: 43, cardname: "Cancel", edition: "10E"};
let singleCard2:Card_possibilities= {id: 1227, cardname: "Cancel", edition: "AKH"};
let CardArray:Card_possibilities[]=[];
CardArray.push(singleCard1);
CardArray.push(singleCard2);

cardnames_obj.possibilities(CardArray); //<-- error

看看StackBlitz https://stackblitz.com/edit/typescript-zwqpxp 但是当我尝试填补可能性时,我得到了错误:

无法调用类型缺少调用签名的表达式。类型“ Card_possibilities []”没有兼容的呼叫签名。

有人建议我在做什么错吗?

解决方案:以正确的方式使用Setter: cardnames_obj.possibilities = CardArray;

1 个答案:

答案 0 :(得分:1)

此类方法:

    public set possibilities(CardArray: Card_possibilities[]){
        this._possibilities = CardArray;
     }

是二传手,typescript classes的功能之一。

通过使用set关键字声明该方法,这意味着只要您编写possibilities的{​​{1}}属性,该函数就会运行(而不是尝试修改{{ 1}}字段,甚至不存在),因此:

Deck_List

将触发possibility功能。您正尝试直接调用它,这是错误的:

cardnames_obj.possibilities = CardArray; //失败

因此,您的问题与数组无关,而与您使用set设置方法的方式有关。

现在,根据您的tsc配置,您可能还会遇到另一个与打字有关的错误,例如函数签名中缺少返回类型之类的东西,我对此不确定(但是我认为设置程序不需要类型签名) )。