2013-07-23 3 views
3

Visual Studio 2012에서 typescript 0.9.0.1을 사용하고 있습니다. 내 코드에서 3 진수 연산자를 사용할 때 컴파일러에서 오류가 발생합니다 : 조건부 표현식의 유형을 결정할 수 없습니다. 가장 일반적인 유형은 voidboolean 사이에 없습니다.3 진 연산자를 사용하는 동안 컴파일러 오류가 발생했습니다.

코드는 다음과 같습니다

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); 
    } 
} 

가 나는 경우 - 대신 다른 삼항 연산자의 사용하려고합니다. 그런 다음 오류가 발생하지 않습니다.

코드는 다음과 같습니다 내 코드에 뭔가 문제가

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 모두 만족시킬 수 있습니다. 따라서 오류가 발생합니다.

3 차 연산자를 다시 if/else 문으로 확장하면 오류를 해결할 수 있지만 주어진 예제에서 someVar 유형을 any으로 지정해야합니다.

+1

+1 좋은 답변입니다. – Fenton

+1

당신은 매우 도움이됩니다. 내 영어가 너무 좋지 않아 오류 메시지를 분명히 이해할 수 없습니다. 나는 삼항 연산자를 사용하면서 다른 타입의 값을 반환 할 수 있다는 것을 깨닫지 못했습니다. –

+0

귀하의 질문에 나는 영어가 나쁘다고 말할 수 없었다 :) 내 실수와 도움이 기쁘다! – thomaux

관련 문제