我想制作一个装饰工,您可以从中选择艺术品。因此,我想将这张卡片的所有可能性添加到我的对象中,以便以后处理。
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;
答案 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配置,您可能还会遇到另一个与打字有关的错误,例如函数签名中缺少返回类型之类的东西,我对此不确定(但是我认为设置程序不需要类型签名) )。