result2와 같은 결과로 유형을 가져와야합니다. 함수를 변경하여 어떻게 든 해결할 수 있습니까? getNestedProperty?큰 중첩을 사용하여 올바른 유형을 얻을 수 있습니까?
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);
}
은 내가 결과 유효 유형 =() => 무효로받을 수 있습니까?
+1. reduce 함수를 중첩 함수 나 가독성을위한'const' 선언으로 추출 할 것을 제안 할 수 있습니까? –
@AluanHaddad 귀하의 제안에 감사드립니다. 실제로 가독성을 향상시킵니다. 그러나 코드는 OP에서 가져온 것이므로 문제를 일으키지 않는 현재 상태로두고 싶습니다. 코드를 검토하지 않고 문제 해결을위한 솔루션을 제공합니다. 당신이 이해하기를 바랍니다. –
나는 좋은 가정을 설정하는 것이 좋다고 생각한다. –