2017-10-23 10 views
0

にコードを参照するとき、なぜ活字体がエラーをスローしませんが(TS Playground here)です:私はrecurrsivelyインタフェース

interface IConversionData { 
    [index: string]: IConversionData | string; 
} 

const conversionData: IConversionData = { header: {}} 

conversionData.header["9106"] = "4"; 
conversionData.header["9132"] = "1"; 
conversionData.header.myChild2["abc"] = "1"; //Property 'myChild2' does not exist on type 'string | IConversionData'. Property 'myChild2' does not exist on type 'string'. 

私はこれはまだエラーをスローrecursive interface types are possible in TypeScriptことが、知っています。どうして?

+3

を再帰的インタフェースは問題ではありません、ヘッダはタイプIConversionDataのものであろう|文字列なので、myChild2は定義されていません。 –

答えて

3

これは、再帰とは何の関係もありません:

(conversionData.header) is of type IConversionData | string 

のいずれかのオプションがstringで、stringmyChild2の欠けているのでので、あなたがmyChild2にアクセスできないことを語っています。ところで

、あなたの例では、実行して、容易に修正可能である:

export interface IConversionData { 
    [index: string]: IConversionData | string; 
} 

const conversionData: IConversionData = { header: {}} 

conversionData.header["9106"] = "4"; 
conversionData.header["9132"] = "1"; 
conversionData.header["myChild2"] = {abc: "1"}; 
関連する問題