【发布时间】:2018-07-12 02:36:28
【问题描述】:
我已经在我的打字稿项目中声明了一个类 Month。它有 6 个属性和 7 个成员方法,其中 4 个是私有的。
当尝试通过以下代码实例化 Month 的实例时,我收到一条错误消息,指出我没有提供方法作为参数的参数。 this.hasAdditionalCategories 是类方法。为什么我需要提供它?我的理解是我只需要提供属性来实例化,然后实例将继承类定义中的方法。
这看起来有道理吗?干杯
错误信息是
[ts] 类型参数 '{ date: Date;评论:空;预期现金流:数字;对冲比率:数字; expectedCashFlowHedge:...' 不可分配给“月份”类型的参数。 类型“{ date: Date;”中缺少属性“hasAdditionalCategories”评论:空;预期现金流:数字;对冲比率:数字;预期现金流对冲:...'。
const M: Month = new Month({
date: new Date(),
comment: null,
expectedCashFlow: 0,
hedgeRatio: 0,
expectedCashFlowHedge: 0,
categories: []
})
export class Month {
date: Date;
expectedCashFlow: number;
hedgeRatio: number;
expectedCashFlowHedge: number;
categories: Category[] = [];
comment: string;
constructor(x: Month) {
if (x) {
this.date = x.date;
this.expectedCashFlow = x.expectedCashFlow;
this.hedgeRatio = x.hedgeRatio;
this.expectedCashFlowHedge = x.expectedCashFlowHedge;
x.categories.forEach(
res => this.categories.push(
new Category(res)
)
);
this.comment = x.comment;
}
}
get hasAdditionalCategories(): boolean {
return this.categories.length > 1;
}
get hasComment(): boolean {
if (!this.comment) {
return false;
} else {
return this.comment.length > 0;
}
}
reset(setting: IExposureSetting): void {
this.resetCashFlows();
this.resetHedgeRatio(setting);
this.resetComment();
this.resetCategories(setting);
}
private resetComment(): void {
this.comment = null;
}
private resetCategories(setting: IExposureSetting): void {
this.categories = [];
const cat: Category = new Category({
category: setting.assumedOriginOfExposure,
hedgeRatio: setting.defaultHedgeRatio,
expectedCashFlow: 0,
expectedCashFlowHedge: 0
});
this.categories.push(cat);
}
private resetCashFlows(): void {
this.expectedCashFlow = 0;
this.expectedCashFlowHedge = 0;
}
private resetHedgeRatio(setting: IExposureSetting): void {
this.hedgeRatio = setting.defaultHedgeRatio;
}
}
【问题讨论】:
-
不要试图伪造具有对象初始化器的类。只需使用对象并继续前进。你的方法意味着多年的痛苦和磨难。
-
Month的构造函数采用了已经是Month的东西?为什么?你为什么要尝试用普通值覆盖访问器? -
ctor 中的 Month 参数在那里,因为我使用它来为它提供订阅中的元素。为了让我可以使用类方法。只是用 Observable
注释 observable 并没有让我得到类中定义的方法。实际上,如果在深度嵌套的“类类”中有几个的话,月份类就开始了……@aluan:对不起,我不明白这个的意思,我对这个还是很陌生 -
@baouss 我的意思就是这样。由于您是新手,因此不要对它是什么做出假设。特别是,避免尝试将 TypeScript 视为您已经知道的其他语言。提示:JavaScript 中的类与其他主流语言中的类完全不同。您不能使用相同的模式。
-
感谢您回到这个话题。但我如何理解“伪装”?
标签: class typescript methods properties arguments