-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Can't dereference array type in conditional type #22985
Copy link
Copy link
Closed
Labels
BugA bug in TypeScriptA bug in TypeScriptFixedA PR has been merged for this issueA PR has been merged for this issue
Milestone
Description
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 ?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
BugA bug in TypeScriptA bug in TypeScriptFixedA PR has been merged for this issueA PR has been merged for this issue