2017-08-25 106 views
-1

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

我有以下型号:

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

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

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

+0

'我希望能够在构造函数和构造函数中实例化这个'<=一个太多的构造函数?你的意思是写什么? – Igor

+1

你到底在干什么?例如,很容易找到如何定义可选参数。 – jonrsharpe

+0

可能的重复:[如何在TypeScript中传递可选参数,同时忽略其他一些可选参数?](https://stackoverflow.com/a/30734778/1260204)。您可以为构造函数使用相同的模式。 – Igor

回答

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