interface datageneric { value: number; } function transform<d extends datageneric>(data: datageneric[], get_value: (record: d) => number) { // works without error let values = data.map(get_value); // following line errors with: // argument of type 'datageneric' not assignable parameter of type 'd'. // values = data.map(d => get_value(d)); // works without error, why type assertion needed? values = data.map(d => get_value(d d)); } i'm wondering why type assertion needed when passing single value get_value?
typescript 2.3.4
the reason need cast d or error:
argument of type 'datageneric' not assignable parameter of type 'd'
is this:
interface datageneric2 extends datageneric { value2: string; } transform([{ value: 3 }], (record: datageneric2) => { return record.value2.length; }); in example, function being passed get_value expects values of type datageneric2 , not datageneric.
error compiler complaining that:
argument of type 'datageneric' not assignable parameter of type 'datageneric2'.
when cast d (or change signature of function) tell compiler know you're doing , ok.
Comments
Post a Comment