处理Typescript中的可选参数

时间:2017-08-25 16:50:27

标签: typescript optional

我如何处理Typescript中的可选参数?

我有以下型号:

export class PowerPlant {
  id: number;
  orgName: string;
  minPower: number;
  maxPower: number;
  powerPlantType: string;
  rampRateInSeconds: number;
  rampPowerInKw: number;
}

在这个模型中,最后两个字段,即rampRateInSeconds和rampPowerInKw将是可选值,并且将取决于powerPlantType字符串。我希望能够在构造函数和构造函数中实例化它,我将检查powerPlantType字符串,如果它是某种类型,我想设置这2个额外的字段。

来自函数编程背景,我会在powerPlantType字符串上将这两种类型作为可选和模式匹配,并相应地设置2个值。我怎样才能在Typescript中达到同样的效果?

1 个答案:

答案 0 :(得分:1)

如果您没有方法,接口就足够了,您可以将对象文字分配给接口类型的变量,则不需要类。接口可以有可选参数,因此您不需要指定所有成员:

interface PowerPlant {
    id: number;
    orgName?: string;
    minPower?: number;
    maxPower?: number;
    powerPlantType?: string;
    rampRateInSeconds?: number;
    rampPowerInKw?: number;
  }

  var x : PowerPlant = {
      id: 10 
  }

如果你想要一些感觉更像模式匹配的东西,你可以使用有区别的联合类型和类型守卫:

interface Square {
    kind: "square";
    size: number;
}

interface Rectangle {
    kind: "rectangle";
    width: number;
    height: number;
}

interface Circle {
    kind: "circle";
    radius: number;
}

type Shape = Square | Rectangle | Circle;

function test1(s: Shape) {
    if (s.kind === "square") {
        s;  // Square
    }
    else {
        s;  // Rectangle | Circle
    }
}

here

的上一个例子