2017-09-27 15 views

答えて

1

これは良い質問です。後者の割り当てでは、b2はであり、構造的にはBと一致します。したがって、bの前の割り当ても同様に機能すると予想されます。なぜTypeScriptはオブジェクトリテラルのインデックスシグネチャを推論し、構造的に同一のインターフェイスではないのでしょうか?

オブジェクトリテラルとタイプエイリアスはimplicit index signaturesのように見えますが、TypeScript v2.0以降では使用できましたが、インターフェイスでは発生しません。再び:なぜですか? RyanCavanaughの最近のcommentMicrosoft/TypeScript#15300上の@に応じまあ

、:

だけで人を埋めるために、この動作は仕様現在あります。インタフェースは追加の宣言によって補強することができるが、型エイリアスはそうではないので、インタフェースよりも型エイリアスの暗黙的なインデックス署名を推論するのが安全です(重い引用符)。しかし、それが理にかなっていると思われる場合は、インタフェース用にも行うことを検討します。

だから、実装を検討する可能性があります。気になる人は、that issueに行き、新しく魅力的なものであればユースケースの説明とともにコメントを付けるか、コメントを付けることができます。

希望に役立ちます。がんばろう!

0

インターフェイスBにはインデックスの署名がありません。 b:Ba:Aに割り当てることによって、どのように割り当てが行われるかをタイプスクリプトがチェックします。 Bにインデックスの署名を追加することで修正できます。

interface B { 
    p: string; 
    d: number; 
    [k: string]: string | number 
} 
関連する問題