TypeScript简写为“ if”

时间:2018-08-30 11:08:21

标签: javascript typescript

我是初学者Web开发人员。 对不起,我的英语不好。

export class Vector{
    protected x : number = 0
    protected y : number = 0
    protected z : number = 0

    set(x?: number , y? : number , z? : number){
        this.x = x ? x : this.x
        this.y = y ? y : this.y
        this.z = z ? z : this.z
    }
}

我要从“ this.x = x?x:this.x”中删除“:this.x”

我想写点时间,我想删除其他部分。

set(x?: number , y? : number , z? : number){
    if(x){
      this.x = x
    }
}

我不想这样写。 因为它不酷。 任何人都可以告诉我编写此代码的好方法。

-添加---

我想做的就是这样。

set(x?: number , y? : number , z? : number){
            this.x = x ? x : DO NOTHING(WRITE NOTHNG)
        }

----------致Lars Holdaas ---------- enter image description here

在这里!在平等之下! 说“;”是必需的。

2 个答案:

答案 0 :(得分:2)

通常,x && this.x=x是完成此操作的最短语法。

但是x,y和z都是数字。对数字使用这种简写语法有点危险。考虑用x = 0调用set的情况。 0 && this.x=x不会执行this.x,因为Javascript中的0为false。通过阅读代码,这似乎不是您想要实现的,相反,如果未定义x,则想跳过设置this.x。

在这种情况下,我建议使用以下代码:

set(x?: number , y? : number , z? : number){
    typeof x === 'number' && (this.x = x);
    typeof y === 'number' && (this.y = y);
    typeof z === 'number' && (this.z = z);
}

这样,您的set函数将支持发送0作为参数,而当前不支持。

答案 1 :(得分:1)

一种编写方法的干净方法是

set(x?: number , y? : number , z? : number){
  this.x = x || this.x;
  this.y = y || this.y;
  this.z = z || this.z;
}

另一种方式是

set(x?: number , y? : number , z? : number){
  x && this.x = x;
  y && this.y = y;
  z && this.z = z;
}

但是,正如@Lars Holdaas已经提到的那样,这将不支持伪造的值(例如0"")。 解决此问题的通用方法是编写验证或过滤器函数以判断该值是否为 实际上是否真的适合该参数。

// returns `true` if x is a number
const n = x => typeof n === 'number';

set(x?: number , y? : number , z? : number){
  n(x) && this.x = x;
  n(y) && this.y = y;
  n(z) && this.z = z;
}

希望这会有所帮助:)