Don't you have
React.PropTypes.shape({
foo: React.PropTypes.string,
bar: React.PropTypes.shape({
fieldNum: React.PropTypes.number
})
})
? I'm not saying it isn't verbose, but I'm pretty sure that as of a few months ago, this existed in React natively.