Ich habe diese Funktion applyObject
, die ich gerne eingeben würde. Die Paramter für die Funktion sind von T
und V
wo V
ein Objekt von Funktionen ist:Wie wird ein Objekt von Gettern auf ihren Wert abgebildet?
type V = { [key: string]: <R>(t: T) => R };
und T
ist der Typ I über alle Funktionen von V
einspeisen wollen, wenn angewendet. Gibt es eine Möglichkeit, dies zu tun?
Ich denke, dass es mit einem abgebildeten Typ möglich ist, aber ich bin unsicher. Ich denke so:
function applyObject<T, V extends { [key: string]: (t: T) => any }>(t: T, v: V) {
return Object.entries(v).reduce((applied, [_key, func]) => {
const key = _key as keyof V;
applied[key] = func(t);
return applied;
}, {} as {[P in keyof V]: Invoke<V[P]>}); // `Invoke` doesn't exist
}
const applied = applyObject(
{ one: 1, two: 'something' },
{ a: t => t.one, b: t => t.two }
);
applied.a; // should give intellisense as number
applied.b // should give intellisense as string
Ich glaube nicht, dass es möglich ist, das Problem ist, dass selbst 'V' nicht gut typisiert ist, ich vermute, Sie möchten sagen, dass jede Funktion von' V' ein 'T' nimmt und jeden Typ zurückgeben kann , aber die Art, wie Sie es 'R' definieren, ist Sache des Anrufers und nicht der Funktion. –
@ TitianCernicova-Dragomir Ich habe 'R' aus der Frage entfernt. Ich bin mir nicht sicher, ob es nötig ist. –