найдётся кто-то, кто может помочь.
Я пытаюсь реализовать дерево категорий. У меня есть перечисления всех категорий на каждом уровне.
Допустим
// 1 уровень
enum INode {
category1 = "Category 1",
category2 = "Category 2",
}
// 2 уровень
enum ICategory1{
subcategory1 = "Subcategory 1",
subcategory2 = "Subcategory 2",
}
enum ICategory2 {
subcategory3 = "Subcategory 3",
subcategory4 = "Subcategory 4",
}
// 3 уровень
enum ISubcategory1 {
subsubcategory1 = "Subsubcategory 3",
subsubcategory2 = "Subsubcategory 4",
}
// и так далее...
// Соотвественно мне нужно как можно более лаконично и точно описать тип.
interface ICategory<T extends string> {
name: ${T},
// Название категории содержится в перечислении
// Допустим для типа ICategory<ICategory1> это может быть "Subcategory 1"
categories?: Array<ICategory<`I + ${T[name}]}`>>
// Я пытаюсь задать тип возможных подкатегорий для "Subcategory 1" как ICategory<ISubcategory1>
// то есть взять ключ переданного name из перечисления, сделать его первую букву заглавной и добавить в начало I
// Вот так примерно 'I' + T[name].charAt(0).toUpperCase() + T[name].slice(1)
}
Пока ругается на name потому что "'name' refers to a value, but is being used as a type here. Did you mean 'typeof name'?"
Подскажите, пожалуйста, как я могла бы исправить эту ошибку или иным образом добится единого лаконичного и коректного типа для всех категорий?
не понятно, покажите, пожалуйста, типовой пример.
Почему бы просто не передавать в интерфейс тип подкатегории?
потому что в одной категории содержатся разные подкатегории. и для каждой подкатегории есть свои. передать в интерфейс можно только union всех типов подкатегорий, а значит это теряет смысл, по тому что нет проверки на соответсвие конкретной, соответствующей имени
абсолюто любое дерево категорий подойдёт как пример
Обсуждают сегодня