2017-06-08 6 views
0

JavaScriptから変換するものの型をTypeScriptで作成しようとしています。TypeScriptのマップされた型の特定のプロパティに型を設定します。

基本的に、型は標準のオブジェクトリテラルで、各子は同じ型の繰り返しです。しかし、 '_errors'プロパティの場合、これは別の型の配列でなければならず、オプションです。

これはTypeScriptで可能ですか?

これは私が後にしたものですが、以下の構文は無効です。オブジェクトはこのように見えた

​​

JavaScriptでは:

let myObject = { 
    property1: { 
    property1a: { 
     _errors: [{ 
      message: 'string message', 
      mapped: false 
     },{ 
      message: 'string message', 
      mapped: false 
     }] 
    }, 
    property1b: { 
     _errors: [{ 
      message: 'string message', 
      mapped: false 
     }] 
    } 
    }, 
    property2: { 
     _errors: [{ 
      message: 'string message', 
      mapped: false 
     }] 
    } 
} 

答えて

0

たぶん私は間違っているが、私はこれが今日可能であるとは思いません。私は試しました:

interface ErrorWrapper { 
    message: string; 
    mapped: boolean; 
} 

type ErrorMap<T> = { 
    [P in keyof T]: Partial<{ _errors: ErrorWrapper[] }> & ErrorMap<(Partial<T[P]>)>; 
}; 

interface SomeObj { 
    property1: { 
     property1a: number; 
     property1b: string; 
    }; 
    property2: number; 
} 

declare let x: ErrorMap<SomeObj> ; 

// Autocomplete works as expected 
console.log(x.property1.property1a._errors); 
console.log(x.property1.property1b._errors); 
console.log(x.property2._errors); 

// Error 
let myObject: ErrorMap<SomeObj> = { 
    property1: { 
    property1a: { 
     _errors: [{ 
      message: "string message", 
      mapped: false 
     }, { 
      message: "string message", 
      mapped: false 
     }] 
    }, 
    property1b: { 
     _errors: [{ 
      message: "string message", 
      mapped: false 
     }] 
    } 
    }, 
    property2: { 
    _errors: [{ 
     message: "string message", 
     mapped: false 
    }] 
    } 
}; 

私はマップされたタイプの条件が必要だと思うが、that feature is not available yetと思う。

+0

ええ、あなたは正しいと思います。ありがとう。 – Rich

関連する問題