2016-11-15 7 views
0

私はタイプスクリプトユニオンタイプを試しています。 私は数値プロパティを持つクラスを持っているが、私はそれは3つの特別なケースがしたい:インフィニティを、なしと自動タイプスクリプトユニオンタイプ番号または特定の文字列

インフィニティとなし、それぞれNumber.POSITIVE_INFINITYNULLで表現することができますが、私は何をするか分かりません自動価値について

この値は、もともとは文字列として表現されたXML文書に含まれています。例えば<element myValue="123"/><element myValue="-4096"/><element myValue="infinity"/><element myValue="auto"/>または

<element/>は、どのように私は数として使用されるが、まだ利用可能自動値を持つことができユニオン型を作成することができます。私は数とEnumの組合タイプについて考えましたが、どのようにしてそれを最大限に活用するかはわかりません。

ヒント?

class MyClass { 
    name: string; 
    duration: number; // Want to support None/Null, Infinity and Auto 
} 

答えて

1

が、私は自動価値について何をするか分からない

どちらも私たちだろう。たとえば、自動価値の例を挙げる必要があります。有効なautoの値は1です。私はそれが疑わしいと私は疑うとすべて番号が有効です。

class MyClass { 
    name: string; 
    duration: number | undefined | 'auto'; 
} 

(ここで私は欠損値を表すためにundefinedの代わりnullを使用し、あなたがまだない場合:。だから私はあなたのタイプの注釈内の文字列にリテラル'auto'の使用を検討してduration : number | null

+0

1オート値ではありません。 Autoはそれ自身の値であり、特別なロジックをトリガする必要があるので、 "null"でできる限り "auto"を値として使用する必要があります。マイケル・リウの答えは私が必要とするもののように見えます。 – user3336731

3

型注釈を使用します活字体2.0を使用して、

この型注釈は、あなたがNumber.POSITIVE_INFINITY含む数字()、undefined、およびdurationから'auto'を割り当てることができます)。undefined省略しますが、他の文字列ではありません。

使用例:

var c = new MyClass(); 
// ... 

if (c.duration === undefined) { 
    // ... 
} else if (c.duration === 'auto') { 
    // ... 
} else { 
    // In this branch, the type of c.duration will be number. 
    // ... 
} 
+0

これは素晴らしいですね!ちょうど私が探していたもの!以前は文字列リテラルを調べましたが、コンパイルエラーが発生しました。おそらく、私はtypescriptコンパイラの古いバージョンを使用しています。 TypeScript 2.0へのアップグレードを検討します。 – user3336731

+1

@ user3336731:文字列リテラル型は、TypeScript 1.8で導入されました。 –

関連する問題