4

我在 Visual Studio 2012 中使用 typescript 0.9.0.1。在我的代码中使用三元运算符时,编译器抛出错误:无法确定条件表达式的类型。void在和之间找不到最佳通用类型boolean

代码是:

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

我的代码有问题吗?

4

1 回答 1

10

错误说明了一切。这意味着其中一种情况会导致 ,void而另一种情况会导致boolean。由于这两种类型没有通用类型,因此您不能在三元运算符中使用它们。尽管在您的特定情况下,它可能是允许的,因为您没有将结果分配给变量。

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

var someVar = condition ? aMethodWhichReturnsBoolean : aMethodWhichReturnsVoid;

应该清楚的是,编译器无法知道someVar将是哪种类型,而且它无法找到另一种同时满足boolean和的类型void。因此它会抛出一个错误。

在您的情况下,将三元运算符再次扩展为 if/else 语句将解决错误,但(要完整)在我给出的示例中,您需要指定someVaras的类型any

于 2013-07-23T15:33:06.737 回答