This problem has bugged me for a long time. I believe the solution is to treat external namespaces as distinct types automatically.
/** @interface */
var ReactType = function() {};
/** @param {string} tagName */
ReactType.prototype.createElement = function(tagName) {};
/** @type {!ReactType} */
var React;
/** @interface */
var ReactType = function() {};
ReactType.prototype.createElement = function() {};