在JavaScript中,出于显而易见的众所周知的原因,通常使用===代替==是最佳实践。

在TypeScript中,哪个是首选?有没有哪一种比另一种更好?

恕我直言,在TypeScript中使用===毫无意义,因为比较仅适用于相同类型,因此您将不会像普通JavaScript那样拥有(或多或少有趣的)强制游戏。如果您暂时放弃对JavaScript的兼容性,TypeScript甚至可以摆脱===,不是吗?

最佳答案

想象您正在从头开始设计TypeScript。从本质上讲,您正在尝试进行优化,以使更安全的代码更易于编写(TypeScript设计目标1),但有一些注意事项使您无法执行所需的所有操作。

JavaScript兼容性(TypeScript设计目标7)

JavaScript应该是有效的Typescript,且不得更改。

CoffeeScript对此不做任何保证,因此它可以将==的所有实例转换为===,并简单地告诉用户不要依赖==的行为。 TypeScript无法重新定义==,而不会破坏所有依赖其行为的JavaScript代码(尽管这会对3产生可悲的影响)。

这也意味着TypeScript无法更改===的功能,例如,无法在编译时检查两个操作数的类型,并拒绝比较不同类型变量的程序。

此外,兼容性不仅仅限于JavaScript程序。破坏兼容性还会破坏对=====之间差异的假设,从而影响JavaScript程序员。参见TypeScript non-goal number 7:



JavaScript作为编译目标(TypeScript设计目标4)

所有TypeScript必须在JavaScript中可表示。此外,在可能的情况下,它应该是惯用的JavaScript。

但是,实际上,TypeScript编译器可以使用返回 bool 值的方法进行所有比较,从而完全消除了=====。对于用户来说,这甚至可能更安全:在每个TypeScript类型上定义类型安全的相等方法(就像C++ operator==一样,只是没有重载)。

因此,有一个解决方法(供用户比较类)。在使用类型安全的相等方法之前,可以将unknownany变量的类型缩小。

哪个更喜欢

在JavaScript中随处使用===。这具有避免==常见的陷阱的优点,并且不需要您维护其他方法。 TypeScript编译器的输出将接近惯用JavaScript。 使用==与JavaScript具有几乎相同的陷阱,尤其是当您涉及any[]{}时。 作为异常(exception),如果库代码不一致,则使用== null检查nullundefined可能会避免麻烦。

引用相等的方法(类似于类的===的行为)可能与深度/值递归相等检查相混淆。此外,===在TypeScript中被广泛使用,并且使您的代码符合惯例通常比任何少量类型安全更重要。

关于javascript - 为什么在TypeScript中使用三等号(===)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57125700/

10-11 23:24
查看更多