#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! }, );
Итак, мой вопрос в том, почему последняя демонстрация сработала, а вторая-нет?