Typescript type-fest не работает с константой

#typescript #types #type-conversion

Вопрос:

Я использую PartialDeep от type-fest, на const подобном:

 const test = {
  value: 1,
  secondLevel: {
    value: 1,
    thirdLvl: {
      value: 1,
      fifthLvl: {
        value: 1
      }
    }
  }
}
 

И у меня было бы что-то вроде этого:

 type PD = {
  value?: number;
  secondLevel?: {
    value?: number;
    thirdLvl?: {
      value?: number;
      fifthLvl?: {
        value?: number
      }
    }
  }
}
 

Но всегда получаю только 1 глубокое необязательное свойство.

Может ли кто-нибудь объяснить это или предложить какое-то обходное решение? Спасибо.

Ответ №1:

Я думаю, что это работает нормально.

Следует отметить одну вещь: как проявляется этот тип. Вы, вероятно, видите что-то вроде:

 type TestType = {
    value?: number | undefined;
    secondLevel?: PartialObjectDeep<{
        value: number;
        thirdLvl: {
            value: number;
            fifthLvl: {
                value: number;
            };
        };
    }> | undefined;
}
 

Может показаться, что второй уровень не имеет дополнительных свойств , однако вы также увидите, что второй уровень также обернут PartialObjectDeep<...> , что приводит к частичному выполнению на этом уровне.

Если вы попытаетесь использовать этот тип, вы увидите, что он работает так, как вы ожидаете:

 // Works fine, no errors
const testPartial: PartialDeep<typeof test> = {
  value: 1,
  secondLevel: {
    thirdLvl: {
      value: 1
    }
  }
}
 

Игровая площадка