gpt4 book ai didi

typescript - 使用三元运算符时出现编译器错误

转载 作者:搜寻专家 更新时间:2023-10-30 20:54:10 24 4
gpt4 key购买 nike

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

我的代码有问题吗?

最佳答案

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

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

var someVar = condition ? aMethodWhichReturnsBoolean : aMethodWhichReturnsVoid;

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

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

关于typescript - 使用三元运算符时出现编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17814258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com