declare function promiseAllByKey(o: O): Promise<$ObjMap>; declare function keyMirror(o: O): $ObjMapi(k:K) => K>; var o = keyMirror({ FOO: null, BAR: null, }); (o.FOO : 'FOO'); // ok (o.FOO : 'BAR'); // error, 'FOO' incompatible with 'BAR' promiseAllByKey({ foo: Promise.resolve(0), bar: 'bar', }).then(o => { (o.foo: string); // error, number ~> string (o.bar: 'bar'); // ok });