import * as React from 'react'
import { observer } from 'mobx-react'

export default function<M>(Wrapped: React.ComponentClass<M> | React.StatelessComponent<M>) {

  @observer
  class MobxWrapper extends React.Component<{ model: M }, void> {
    render() {
      return React.createElement(observer(Wrapped as any), this.props.model)
    }
  }

  return MobxWrapper as React.ComponentClass<{ model: M }>
}

import * as React from 'react'
import { observer } from 'mobx-react'

export default function<M>(Wrapped: React.ComponentClass<M> | React.SFC<M>) {

  @observer
  class MobxWrapper extends React.Component<{ model: M }, void> {
    render() {
      return React.createElement(Wrapped, this.props.model)
    }
  }

  return MobxWrapper as React.ComponentClass<{ model: M }>
}

--- 
+++ 
@@ -1,12 +1,12 @@
 import * as React from 'react'
 import { observer } from 'mobx-react'
 
-export default function<M>(Wrapped: React.ComponentClass<M> | React.SFC<M>) {
+export default function<M>(Wrapped: React.ComponentClass<M> | React.StatelessComponent<M>) {
 
   @observer
   class MobxWrapper extends React.Component<{ model: M }, void> {
     render() {
-      return React.createElement(Wrapped, this.props.model)
+      return React.createElement(observer(Wrapped as any), this.props.model)
     }
   }
 
Fix failing to observe wrapped component
