2016-06-25 6 views
3

私はtypescriptを学んでいるだけで、文字列でインデックスを作成するときは配列の型の安全性がないことに気付きました。番号でインデックスを作成すると、期待どおりに動作します。誰でもこれを説明できますか?私はそのバグを疑うが、私はこの動作に関する情報を見つけることができません。おかげ配列の文字列インデックスを使用すると、型の安全性が損なわれますか?

あなたがいないを行う ためです
let x : string[] = []; 
x[0] = 'test'; // OK, as expected 
x[0] = 123; // as expected, error TS2322: Type 'number' is not assignable to type 'string'. 
x['hi'] = 123; // OK?? Expected error TS2322 as above 
+0

コメントは削除します。 –

答えて

3

--noImplicitAnycompiler optionがオンになっています。

は上にそれを回し

、それはコンパイルエラーがスローされます。

error

+0

このオプションではTS2322が表示されないようですが、これは別のチェックと思われます。 'x ['hi'] = 'bar''を試してみたらどうなりますか?スクリーンショットと同じエラーが表示されますか?もしそうなら、非数値インデックスを持つ配列にアクセスすること(〜配列をハッシュとして使用しようとする)に関連する一般的なエラー/警告であり、配列の要素型 'string'と' 123'を割り当てることの間の型の不一致 - そして、私がOPとTS2322がそれについて理解していることから。 – quetzalcoatl

+0

'x '' hi '] =' bar ';'を実行している@quetzalcoatlは同じエラーになります。また、オブジェクトの型に '[key:string]:number;'で定義されたインデックスシグネチャがないため、 '--noImplicitAny'との間違いです。配列は '[key:number]:T;' ...のインデックスシグネチャを持ちます。この場合、 'T'は' string'です。 –

関連する問題