16

TypeScript でいくつかの単体テストを書いています。QUnit テストの例には以下が含まれます。

  ok( 1 == "1", "Passed!" );

コンパイラは次のtscように主張しています。

演算子「==」は型「数値」および「文字列」には適用できません

ステータスとともに終了します1(ただし、JS は正しく生成されます)。

仕様は次のように述べています。

<、>、<=、>=、==、!=、===、および !== 演算子

これらの演算子では、一方のオペランドの型がもう一方のオペランドの型と同一であるか、そのサブタイプである必要があります。結果は常に Boolean プリミティブ型になります。

したがって、警告/エラーは正しいようです。しかし、これは型強制演算子の要点をむしろ打ち負かしません==か? この警告を生成しない==TypeScript で使用するための有効なユースケースはありますか?

4

3 に答える 3

15

==TypeScript で (つまり、型強制を使用して)考えられるシナリオの少なくとも 1つは、予想されるオペランドの 1 つが Any 型である場合です。

次のいずれかが真の場合、型 S は型 T のサブタイプであり、T は S のスーパータイプです: [...]

T は Any 型です。

これでおそらく画像が表示されます: Any パラメーターを持つ関数は安全に (まあ、まあまあです。すべての一般的な落とし穴は==ここでも適用されます)、任意のセット型の値と を比較できます==

于 2012-12-19T13:10:13.313 に答える
8

以下は、コンパイラによって許可され、 を利用する一般的な 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");
}
于 2012-12-19T17:51:35.090 に答える
4

TypeScript のポイントの 1 つは、より明確な JavaScript を記述することです。1 == "1" のようなことをすると、文字列と数値のどちらを比較するかによって、明示的にキャストするか、とにかく ToString() / ParseInt() を使用しない限り機能しません。

Any を使用して、変数が通常の動的な JavaScript 変数のように動作するようにすることができますが、存在する多くの JavaScript の問題に巻き込まれないようにする強力な型付け/型推論システムの恩恵を受ける TS のポイントを見失っています。自動型強制規則のためです。

于 2012-12-19T13:44:06.230 に答える