2017-08-25 90 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