// @target: ES6 async function fAsync() { // Without explicit type annotation, this is just an array. return [1, true]; } async function fAsyncExplicit(): Promise<[number, boolean]> { // This is contextually typed as a tuple. return [1, true]; } // https://github.com/Microsoft/TypeScript/issues/13128 interface Obj { stringProp: string; anyProp: any; } async function fIndexedTypeForStringProp(obj: Obj): Promise { return obj.stringProp; } async function fIndexedTypeForPromiseOfStringProp(obj: Obj): Promise { return Promise.resolve(obj.stringProp); } async function fIndexedTypeForExplicitPromiseOfStringProp(obj: Obj): Promise { return Promise.resolve(obj.stringProp); } async function fIndexedTypeForAnyProp(obj: Obj): Promise { return obj.anyProp; } async function fIndexedTypeForPromiseOfAnyProp(obj: Obj): Promise { return Promise.resolve(obj.anyProp); } async function fIndexedTypeForExplicitPromiseOfAnyProp(obj: Obj): Promise { return Promise.resolve(obj.anyProp); } async function fGenericIndexedTypeForStringProp(obj: TObj): Promise { return obj.stringProp; } async function fGenericIndexedTypeForPromiseOfStringProp(obj: TObj): Promise { return Promise.resolve(obj.stringProp); } async function fGenericIndexedTypeForExplicitPromiseOfStringProp(obj: TObj): Promise { return Promise.resolve(obj.stringProp); } async function fGenericIndexedTypeForAnyProp(obj: TObj): Promise { return obj.anyProp; } async function fGenericIndexedTypeForPromiseOfAnyProp(obj: TObj): Promise { return Promise.resolve(obj.anyProp); } async function fGenericIndexedTypeForExplicitPromiseOfAnyProp(obj: TObj): Promise { return Promise.resolve(obj.anyProp); } async function fGenericIndexedTypeForKProp(obj: TObj, key: K): Promise { return obj[key]; } async function fGenericIndexedTypeForPromiseOfKProp(obj: TObj, key: K): Promise { return Promise.resolve(obj[key]); } async function fGenericIndexedTypeForExplicitPromiseOfKProp(obj: TObj, key: K): Promise { return Promise.resolve(obj[key]); }