Typescript — тип возврата не работает с параметрами keyof и функций

#javascript #typescript #types

Вопрос:

Здесь мы можем позвонить getValue().b , чтобы получить вычисленное значение:

 function foolt;  Computed extends {  [key: string]: (param1: string, param2: number) =gt; any;  }, gt;(options: {  computed?: Computed;  callback?: (  getValue: () =gt; {  [K in keyof Computed]: ReturnTypelt;Computed[K]gt;;  },  ) =gt; void; }) {  return options; }  foo({  computed: {  b: () =gt; 2,  },  callback: (getValue) =gt; {  getValue().b; // work!  }, });  

Но это неправильно, когда я хочу определить тип параметра обратного вызова в каждом вычисляемом значении:

 function foolt;  Computed extends {  [key: string]: (param1: string, param2: number) =gt; any;  }, gt;(options: {  computed?: Computed;  callback?: (  getValue: () =gt; {  [K in keyof Computed]: ReturnTypelt;Computed[K]gt;;  },  ) =gt; void; }) {  return options; }  foo({  computed: {  b: (x, y) =gt; x   y, // add x, y here!  },  callback: (getValue) =gt; {  getValue().b; // not work! the type of b is any!  }, });  

PS: эта демонстрация работает, но аргументы для функции foo-это не то, что я хочу.

 function foolt;  Computed extends {  [key: string]: (param1: string, param2: number) =gt; any;  }, gt;(  computed?: Computed,  callback?: (  getValue: () =gt; {  [K in keyof Computed]: ReturnTypelt;Computed[K]gt;;  },  ) =gt; void, ) {}  foo(  {  b: (x, y) =gt; x   y,  },  (getValue) =gt; {  getValue().b; // work!  }, );   

Итак, мой вопрос в том, почему последняя демонстрация сработала, а вторая-нет?