Ich muss den Typ als Ergebnis der gleichen wie das Ergebnis2 erhalten. Ist es möglich, es irgendwie zu lösen, indem Sie die Funktion ändern getNestedProperty?Kann ich den richtigen Typ mit einer großen Verschachtelung bekommen
interface ILevel3 {
level3:() => void;
}
interface ILevel2 {
level2: ILevel3;
}
interface ILevel1 {
level1: ILevel2;
}
const bigNestedObject: ILevel1 = {
level1: {
level2: {
level3:() => {}
}
}
};
const result = getNestedProperty(bigNestedObject)('level1.level2.level3');
result(); // error type object
const result2 = bigNestedObject.level1.level2.level3;
result2(); // it's ok type =() => void
const getNestedProperty = (root: object) => (propertyString: string): object => {
return propertyString
.split('.')
.reduce(<R, KPath extends keyof R>(acc: R, current: KPath): R[KPath] => acc[current], root);
}
Kann ich in Ergebnis gültig type =() => außer Kraft gesetzt?
+1. Kann ich vorschlagen, dass Sie die reduce-Funktion in eine verschachtelte Funktion oder eine "const" -Deklaration zur besseren Lesbarkeit extrahieren? –
@AluanHaddad Vielen Dank für Ihren Vorschlag. Es wird tatsächlich die Lesbarkeit verbessern. Aber der Code stammt aus dem OP, und ich möchte ihn als seinen aktuellen Zustand belassen, da das das Problem nicht verursacht, und ich überprüfe den Code nicht, sondern biete eine Lösung für das besagte Problem. Ich hoffe du verstehst. –
Ich nehme an, aber es tut nicht weh, ein gutes Beispiel zu geben. –