Почему я не могу так описать интерфейс?
Почему я не могу указать, что в объекте есть ключи id, _id со значением типа строки и какие-то еще ключи со значением объекта?
interface ITest
{
_id: string;
id: string;
[ keyContent: string ]:
{
[ keyText: string ]: string;
};
}
Свойство "_id" типа "string" не может быть назначено типу индекса "string" "{ [keyText: string]: string; }". ts(2411)
Свойство "id" типа "string" не может быть назначено типу индекса "string" "{ [keyText: string]: string; }". ts(2411)
Пример данных:
const test = [
{
"_id": "63a45f54f21c59fef23a637b",
"id": "63a45f54f21c59fef23a637b",
"test2":
{
"value1": "stackoverflow",
"value2": "test"
},
"test":
{
"title": "My next"
}
}
];
Ответы (1 шт):
Потому что вот этим объявлением
[ keyContent: string ]:
{
[ keyText: string ]: string;
};
вы указали, что значения вашего типа, индексируемого строкой, должны иметь тип
{
[ keyText: string ]: string;
};
каждый. И получается противоречие, когда вы также говорите, что id и _id должны быть строками.
Если вы имеете в виду, что вам нужен тип, где все значения - это вложенные объекты строка-строка, но при этом в корне лежат строковые id и _id, то можете попробовать сделать например так:
type TTest = {id: string, _id: string} & {[P: string]: Record<string, string> | string}