<!-- Please try to reproduce the issue with `typescript@next`. It may have already been fixed. --> **TypeScript Version:** 2.8.1 and 2.9.0-dev.20180329 <!-- Search terms you tried before logging this (so others can find this issue more easily) --> **Search Terms:** I tried actually a **lot** of terms around mapped types, arrays, conditional types, array member dereferencing in mapped types etc.. **Code** ```ts export type RecursivePartial<T> = { [P in keyof T]?: T[P] extends Array<any> ? {[index: number]: RecursivePartial<T[P][0]>} : T[P] extends object ? RecursivePartial<T[P]> : T[P]; }; var a = {o: 1, b: 2, c: [{a: 1, c: '213'}]} function assign<T>(o: T, a: RecursivePartial<T>) { } assign(a, {o: 2, c: {0: {a: 2, c: '213123'}}}) ``` **Expected behavior:** `T[P][0]` is usable and doesn't produce an error, since T[P] extends any[] and should thus be indexable on [0] (it seems this is the way to dereference an array) **Actual behavior:** I am getting `type 0 cannot be used to index type T[P]`. The odd part is that behaviour-wise it seems to be working ! I can't change the type of the nested `c` to anything other than string and I can't create random properties or what. Am I missing something ?