首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typescript映射函数返回新对象不工作

Typescript映射函数返回新对象不工作
EN

Stack Overflow用户
提问于 2019-08-31 10:35:56
回答 1查看 600关注 0票数 2

我是个打字新手

代码语言:javascript
复制
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;
            }
        });
    }

如果对我不起作用。它仍然返回相同的旧对象(状态值相同)。即使我创建了一个新对象,它也应该是不同的。

当我使用

代码语言:javascript
复制
 if (index == (numberOfDay - 1)) {
         return {
                    'id': reward.id,
                    'point': reward.point,
                    'status': Status.AVAILABLE
                };
            } else {
                return reward;
            }

如果是这样,我就失去了typescript的能力

EN

回答 1

Stack Overflow用户

发布于 2019-08-31 10:57:04

您的构造函数正在硬编码值Status.NONE

代码语言:javascript
复制
...
this.status = Status.NONE
...

这将有效地丢弃传递给构造函数的状态参数。

如果您希望提供Status.NONE作为默认参数,请执行以下操作:

代码语言:javascript
复制
    constructor(id: number, point: number, status = Status.NONE) {
        this.id = id;
        this.point = point;
        this.status = status;
    }

您可以进一步将其简化为:

代码语言:javascript
复制
    constructor(public id: number, public point: number,
                public status = Status.NONE) {
    }

编辑:另外,因为TypeScript是结构化的,而不是名义上的类型(参见structural typing),所以通过返回文本而不是类构造的实例,您不会丢失任何类型安全性。这两个版本的代码都可以安全地说是返回了一个RewardTS Playground

代码语言:javascript
复制
class Reward {
  constructor(public id: string) {}
}

// This is OK.
const x: Reward = {id: '12435'};

如果Reward开始添加方法,那么您失去的是使用对象文字轻松创建Reward的能力。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57734782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档