TypeScript隐式类型转换错误

4

有没有一种方法可以使TypeScript在隐式类型转换时抛出错误?在我看来,JavaScript中的所有隐式类型转换都是语言中较大的错误源之一,因此我希望能够处理以下代码:

let h = (n: number): number => {
    let f = () => 0 
    return -f
}

请告诉我,它将通过-运算符将函数类型隐式转换为数字,因此始终返回NaN


你的例子连警告都没有吗? - stealththeninja
没有警告,即使启用了我知道的所有标志。 - Jackson
刚刚在 Microsoft/TypeScript#20131 提了个问题,想要得到答案,因为我也很惊讶 TS 在这方面会如此懈怠。 - jcalz
@jcalz 接受的答案提供了一些关于为什么这可能是可取的见解。我知道TS的设计是在尝试验证现有代码时不会出现大量错误,所以这可能是他们做出这个决定的原因之一。虽然很烦人,但我将使用规则扩展tslint来检查此问题,就像eslint的no-implicit-coercion一样。顺便说一下,我看到你在IS&T工作。向来自2019年的现在问好 :) - Jackson
1个回答

0

TypeScript是有效的JavaScript,因此可以允许这样做。您可以始终覆盖toString()方法。

请考虑以下内容:

let x = {}
x.toString = () => "1"
ley y = -x  // -1

let f = () => { }
f.toString = () => "1"
let z = -f // -1

2
我知道这是有效的JS代码,但TS还会警告很多其他的问题。 - Jackson
我知道这可能令人惊讶,但我认为这属于“不造成伤害”的范畴。否则TypeScript无法检测到类型(如果您已经实现了toString()并返回一个可以/不能解析为数字的值)。您可以尝试在GitHub上开启一个问题,但很可能会被视为“按预期工作”。这是我的意见。 - unional
是的,我知道 TypeScript 是按预期工作的。我更多地是在寻找一些外部方法来检查它。eslint 有 no-implicit-coercion,但没有 tslint 的等效项。我找到的用于将 eslint 功能添加到 tslint 的扩展程序没有实现 no-implicit-coercion。也许我只能自己制作它。或者不要拥有它。 - Jackson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接