2017-08-25 2 views
-1

Typescriptのオプションパラメータはどのように処理できますか?すなわち、最後の2つのフィールドrampRateInSecondsとrampPowerInKwは任意の値であることを行っているとpowerPlantType文字列に応じて存在します。このモデルではTypescriptのオプションパラメータの扱い

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

、:

は、私は以下のモデルがあります。これをコンストラクタとコンストラクタでインスタンス化できるようにするために、powerPlantType文字列をチェックし、それが特定の型である場合は、これらの2つの追加フィールドを設定したいと思います。

関数プログラミングのバックグラウンドから、私はこれらの2つの型をpowerPlantType Stringのオプションとパターンマッチとして使用し、それに応じて2つの値を設定します。私はTypescriptでどのように同じ効果を得ることができますか?

+0

'これをコンストラクタとコンストラクタでインスタンス化できるようにしたい、<= 1つのコンストラクタが多すぎますか?何を書いているのですか? – 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

関連する問題