TypeScript中的双等于(==)

Ric*_*ers 14 typescript

我一直在用TypeScript编写一些单元测试.示例QUnit测试包含:

  ok( 1 == "1", "Passed!" );
Run Code Online (Sandbox Code Playgroud)

tsc编译器声称:

运算符'=='无法应用于类型'number'和'string'

并退出状态1(虽然它确实正确生成JS).

规范说:

<,>,<=,> =,==,!=,===和!==运算符

这些运算符要求一个操作数类型与另一个操作数类型相同或者是另一个操作数类型的子类型.结果始终是布尔基元类型.

所以看起来警告/错误是正确的.这不是打败了类型强制==运营商的观点吗?是否有一个有效的用例==在TypeScript中使用不会产生此警告?

rai*_*7ow 14

==TypeScript中至少有一个可能的场景(即,使用类型强制)是其中一个预期的操作数是Any类型:

类型S是类型T的子类型,如果满足下列条件之一,则T是S的超类型:[...]

T是Any类型.

现在您可能看到了这样的图片:任何具有Any参数的函数都可以安全地(嗯,更多 - 更少;所有常见的陷阱==仍在此处应用)将其与任何集合类型的值进行比较==.


Fen*_*ton 7

以下是编译器允许使用的一些常见TypeScript示例==.

var a: string = "A";
var b: Object = "A";

if (a == b) {
    alert("Example 1");
}

var c: any = "1";
var d: number = 1;

if (c == d) {
    alert("Example 2");
}

var e: any = "E";
var f: string = "E";

if (e == f) {
    alert("Example 3");
}
Run Code Online (Sandbox Code Playgroud)