Skip to content

Allow type parameter constraints to reference other type parameters #2304

@NN---

Description

@NN---

I would like to have some feature that infers any possible types from the given object in the generic function.
For instance I have a function that receives Object, and I want to have a more specific callback than 'any'.
Current code:

function a(obj: Object, f: (value: any) => any) {
 for(var p in obj) if(obj.hasOwnProperty(p)) {
  (<any>obj)[p] = f((<any>obj)[p]) 
 }
}

a({x:1}, (value: any) => (<number>value)+1);

I wish I had something with more strict typing.

function a<T extends Object, Value: union_of_properties_types_of(T)>(obj: T, f: (value: Value) => Value) {
 for(var p in obj) if(obj.hasOwnProperty(p)) {
  (<any>obj)[p] = f(<Value>(<any>obj)[p]) 
 }
}

// 'f' is denoted to number => number
a({x:1}, value => value+1);

// 'f' is string => string
a({x:"x", y:"y"}, value => {
 return value+"z";
});

Metadata

Metadata

Assignees

Labels

CommittedThe team has roadmapped this issueFixedA PR has been merged for this issueSuggestionAn idea for TypeScript

Type

No type
No fields configured for issues without a type.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions