Skip to content

Can't dereference array type in conditional type #22985

Closed
@ceymard

Description

@ceymard

TypeScript Version: 2.8.1 and 2.9.0-dev.20180329

Search Terms:

I tried actually a lot of terms around mapped types, arrays, conditional types, array member dereferencing in mapped types etc..

Code

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 ?

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFixedA PR has been merged for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions