These examples would fail: window["alert"] : Despite returning the same function, JSObject cannot look this up since it would translate to an attempt to look for a member named "window[\"alert\"]" in window . The TypeScript code would decompose that to something similar to window["(function(a) {return window"]["alert(a)})"] . The Reflect JavaScript global object contains a few useful static functions for manipulating JS objects.