我是个打字新手
export class Reward {
id: number;
point: number;
status: Status;
constructor(id: number, point: number, status: Status) {
this.id = id;
this.point = point;
this.status = Status.NONE;
}
}
export enum Status {
CLAIMED,
AVAILABLE,
NONE
}
public getRewardsOf(numberOfDay: number): Array<Reward> {
return this.availableRewards.map((reward: Reward, index: number) => {
if (index == (numberOfDay - 1)) {
return new Reward(reward.id, reward.point, Status.AVAILABLE);
} else {
return reward;
}
});
}如果对我不起作用。它仍然返回相同的旧对象(状态值相同)。即使我创建了一个新对象,它也应该是不同的。
当我使用
if (index == (numberOfDay - 1)) {
return {
'id': reward.id,
'point': reward.point,
'status': Status.AVAILABLE
};
} else {
return reward;
}如果是这样,我就失去了typescript的能力
发布于 2019-08-31 10:57:04
您的构造函数正在硬编码值Status.NONE
...
this.status = Status.NONE
...这将有效地丢弃传递给构造函数的状态参数。
如果您希望提供Status.NONE作为默认参数,请执行以下操作:
constructor(id: number, point: number, status = Status.NONE) {
this.id = id;
this.point = point;
this.status = status;
}您可以进一步将其简化为:
constructor(public id: number, public point: number,
public status = Status.NONE) {
}编辑:另外,因为TypeScript是结构化的,而不是名义上的类型(参见structural typing),所以通过返回文本而不是类构造的实例,您不会丢失任何类型安全性。这两个版本的代码都可以安全地说是返回了一个Reward。TS Playground
class Reward {
constructor(public id: string) {}
}
// This is OK.
const x: Reward = {id: '12435'};如果Reward开始添加方法,那么您失去的是使用对象文字轻松创建Reward的能力。
https://stackoverflow.com/questions/57734782
复制相似问题