【问题标题】:Dealing with Optional Parameters in Typescript处理 Typescript 中的可选参数
【发布时间】:2018-02-03 18:49:58
【问题描述】:

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

我有以下型号:

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

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

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

【问题讨论】:

标签: typescript optional


【解决方案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的上一个例子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-30
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多