我在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);
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码有问题吗?
tho*_*aux 10
这个错误就是一切.这意味着其中一个案例结果void会导致另一个案例结果boolean.由于这两种类型没有通用类型,因此不能在三元运算符中使用它们.虽然在您的特定情况下,可以允许它,因为您没有将结果分配给变量.
如果您将其分配给变量,则错误更有意义:
var someVar = condition ? aMethodWhichReturnsBoolean : aMethodWhichReturnsVoid;
Run Code Online (Sandbox Code Playgroud)
应该明确的是,编译器无法知道哪种类型someVar会,此外,它无法找到另一种类型将同时满足boolean和void.因此它会抛出一个错误.
在你的情况下,再次将三元运算符扩展为if/else语句将解决错误,但是(完成)在我给出的示例中,您需要指定someVaras 的类型any.
| 归档时间: |
|
| 查看次数: |
7452 次 |
| 最近记录: |