2013-07-23 46 views
3

我在Visual Studio 2012中使用了typescript 0.9.0.1。 在我的代碼中使用三元運算符時,編譯器會拋出一個錯誤:無法確定條件表達式的類型。在voidboolean之間找不到最常見的類型。使用三元運算符時出現編譯器錯誤

的代碼是:

export class event 
{ 
    public static add (elem: HTMLElement, ev: string, fn: (ev: Event) => void, thisObj?) 
    { 
     var callFn = function (ev: Event) { fn.call(thisObj || elem, ev); }; 

     elem.addEventListener ? elem.addEventListener(ev, callFn, false) : elem.attachEvent('on' + ev, callFn); 
    } 
} 

我嘗試使用的if-else代替三元運算符。然後錯誤不會發生。

的代碼是:

export class event 
{ 
    public static add (elem: HTMLElement, ev: string, fn: (ev: Event) => void, thisObj?) 
    { 
     var callFn = function (ev: Event) { fn.call(thisObj || elem, ev); }; 

     if (elem.addEventListener) 
     { 
      elem.addEventListener(ev, callFn, false); 
     } 
     else 
     { 
      elem.attachEvent('on' + ev, callFn); 
     } 
    } 
} 

有什麼錯我的代碼?

回答

9

錯誤是這一切。這意味着其中一個結果爲void,另一個結果爲boolean。由於這兩種類型沒有共同的類型,所以不能在三元運算符中使用它們。雖然在你的具體情況下,它可以可以被允許,因爲你不把結果分配給一個變量。

的錯誤使得如果你把它分配給一個變量更有意義:

var someVar = condition ? aMethodWhichReturnsBoolean : aMethodWhichReturnsVoid; 

應該清楚的是,編譯器無法知道someVar會是哪種類型,此外,它無法找到另一種類型將同時滿足booleanvoid。因此它會拋出一個錯誤。

在你的情況下,再次將三元運算符擴展爲if/else語句將解決該錯誤,但在我給出的示例中(要完成),您需要指定someVar的類型爲any

+1

+1好答案。 – Fenton

+1

你是非常有幫助的。我的英語不太好,我無法清楚地理解錯誤信息。我一直沒有意識到它可以在使用三元運算符時返回不同類型的值。 –

+0

從你的問題我不能告訴你是英語不好:)我的錯誤,很高興已經幫助! – thomaux