我在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);
}
}
}
我的代码有问题吗?
答案 0 :(得分:10)
错误就是这一切。这意味着其中一个案例结果为void
,而另一个案例结果为boolean
。由于这两种类型没有通用类型,因此不能在三元运算符中使用它们。虽然在您的特定情况下,可以被允许,因为您没有将结果分配给变量。
如果您将其分配给变量,则错误更有意义:
var someVar = condition ? aMethodWhichReturnsBoolean : aMethodWhichReturnsVoid;
应该很清楚,编译器无法知道someVar
将是哪种类型,而且它无法找到满足boolean
和void
的另一种类型。因此它会引发错误。
在你的情况下,再次将三元运算符扩展为if / else语句将解决错误,但是(我要完成)在我给出的示例中,您需要将someVar
的类型指定为{ {1}}。