Egret社区

属性重写为访问器报错

2021-6-7 19:03
4096
环境:引擎版本5.3.10,ts版本4.2.4;报错信息:"message": "\"x\" 在类 \"Sprite\" 中定义为属性,但这里在 \"Component\" 中重写为访问器。"
后来发现ts4.0以后不再支持这样写,要修复这个问题貌似要从底层上修改;不过不管报错游戏一样可以正常运行
下面时查找到修复这个问题的例子:
interface IQuote{
  qty:number,
  rate:number|string,
  total?:number|string
}

abstract class AQuote implements IQuote{
abstract set qty(x:number);
abstract get qty():number;
abstract set rate(x:number|string);
abstract get rate():number|string;
abstract set total(x:number|string);
abstract get total():number|string


protected abstract updateTotal():void
abstract getTotalNum():number


}

class quote extends AQuote{

  constructor(obj:IQuote){
    super()
    this.qty= obj.qty
    this.rate = obj.rate
  }

  set qty(v:number){
    this._qty = v;
    this.updateTotal()
  }

  get qty(){
    return this._qty;

  }

  set rate(v:number|string){
    this._rate = Number(v);
    this.updateTotal()
  }

  get rate(){
    return new Intl.NumberFormat('en-GB', {style: 'currency', currency: 'GBP'}).format(Number(this._rate))
  }

  set total(v:number|string){
    this._total = Number(v);
  }

  get total():number|string{
    return new Intl.NumberFormat('en-GB', {style: 'currency', currency: 'GBP'}).format(Number(this._total))
  }

  getTotalNum(){
    return Number(this._total)
  }

  protected updateTotal(){
    this.total = Number(this._rate ) * Number(this._qty)
  }

  private _qty:number=1;
  private _rate:number|string=1;
  private _total?:number|string=(Number(this._rate) * this._qty);

}



class QuoteArray extends Array<quote>{

  getTotals():number{
    let totalFigure:number =0
    this.forEach(o=>{
    totalFigure = totalFigure + o.getTotalNum()
    });
    return totalFigure
  }

}

let arry:QuoteArray=new QuoteArray();

arry.push(new quote({
  qty:2,
  rate:5
}))

arry.push(new quote({
  qty:3,
  rate:5
}))
arry.push(new quote({
  qty:3,
  rate:5
}))
arry.push(new quote({
  qty:3,
  rate:5
}))
arry.push(new quote({
  qty:3,
  rate:5
}))
console.log(arry);
console.log(arry.getTotals())



分享到 :
0 人收藏

6 个回复

倒序浏览
碧落.  圆转纯熟 | 2021-6-8 16:11:42
白鹭的ts版本是3.9.7,还没到4呢
rainlaw  登堂入室 | 2021-6-9 14:54:26
碧落. 发表于 2021-6-8 16:11
白鹭的ts版本是3.9.7,还没到4呢

我的ts版本貌似时4.2.4,这个不知道能不能设置
app小王子  社区管理员 | 2021-6-10 11:05:49
碧落. 发表于 2021-6-8 16:11
白鹭的ts版本是3.9.7,还没到4呢

可以升级ts版本
rainlaw  登堂入室 | 2021-6-10 19:52:38

大佬这个问题有计划修改吗
app小王子  社区管理员 | 2021-6-11 15:42:01
rainlaw 发表于 2021-6-10 19:52
大佬这个问题有计划修改吗

你是说自定义组件中不能使用getter  setter这种方式定义属性吗?
rainlaw  登堂入室 | 2021-6-11 16:19:49
app小王子 发表于 2021-6-11 15:42
你是说自定义组件中不能使用getter  setter这种方式定义属性吗?

是的,ts4.0以后貌似不能把属性重写未get和set
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部