使用三元运算符时的编译器错误

时间:2013-07-23 15:16:49

标签: typescript

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

我的代码有问题吗?

1 个答案:

答案 0 :(得分:10)

错误就是这一切。这意味着其中一个案例结果为void,而另一个案例结果为boolean。由于这两种类型没有通用类型,因此不能在三元运算符中使用它们。虽然在您的特定情况下,可以被允许,因为您没有将结果分配给变量。

如果您将其分配给变量,则错误更有意义:

var someVar = condition ? aMethodWhichReturnsBoolean : aMethodWhichReturnsVoid;

应该很清楚,编译器无法知道someVar将是哪种类型,而且它无法找到满足booleanvoid的另一种类型。因此它会引发错误。

在你的情况下,再次将三元运算符扩展为if / else语句将解决错误,但是(我要完成)在我给出的示例中,您需要将someVar的类型指定为{ {1}}。