2017-07-19 6 views
0

申し訳ありませんが、これは超基本的ですが、これについての回答は見つからないようです。 Typescript(https://www.lynda.com/Visual-Studio-tutorials/TypeScript-types-part-2/543000/565613-4.html#tab)でLyndaのチュートリアルをやっていて、私は突っ込んだ。サンプルコードは、TS内でswitch文がどのように動作するのかを示していますが、インストラクターにとってうまく動作するように見えるコードは、 'x'型を 'y'型と比較することはできません。ここでは、コードがあります:Typescript Switchステートメントが '型に匹敵しません'エラー

function enumDemo() { 
enum temperature{ 
    cold, 
    hot 
} 

let temp = temperature.cold; 

switch (temp) { 
    case temperature.cold: 
     console.log("Brrr...."); 
     break; 
    case temperature.hot: 
     console.log("Yikes...") 
     break; 

}} 

私は「タイプ 『temperature.hotはtemperature.cold『』を入力する比較することはできない』と言って「ケースtemperature.hot」の下にエラーや波線を取得します。何がありますか?変数tempが(厳密なヌル・チェックがない場合はnull)のみ、その値そのものを割り当てることができます列挙リテラルタイプtemperature.coldを、与えられます。コンパイラは、すでにケースtemperature.hotは決して起こらないことを知っているので、だ

答えて

0

。ここでtemperature.hotは互換値ではないため、コンパイラはエラーをスローします。我々は(キャストまたは関数から値を取得することによって)リテラルに関する情報を破棄した場合

function how_cold(celsius: number): temperature { 
    return celsius > 40 ? temperature.hot : temperature.cold; 
} 

は、コードはコンパイルされます。また

let temp = how_cold(35); // type is "temperature" 

switch (temp) { 
    case temperature.cold: 
     console.log("Brrr...."); 
     break; 
    case temperature.hot: 
     console.log("Yikes...") 
     break; 
} 

+を付加します値は数値に変換されるので機能します。これは型の有効範囲を広げ、すべての列挙型や他の数値と互換性を持たせるためです。

let temp = temperature.cold; 

switch (+temp) { 
    case temperature.cold: 
     console.log("Brrr...."); 
     break; 
    case temperature.hot: 
     console.log("Yikes...") 
     break; 
    case 5: 
     console.log("What??"); 
     break; 
}