Вложенный ключ вывода

#typescript

Вопрос:

Я пытаюсь получить вывод типа ключа во вложенном объекте. Возьмем этот пример:

 type D = {
  [key: string]: Record<string, unknown>;
}

function isNested<T extends D>(obj: T, key: keyof (T[keyof T])) {}

const testObj: D = {
  first: {
    second: { isNested: true }
  }
}

isNested(testObj, 'first');
 

В этом сценарии я ожидал бы, что isNested(testObj, 'first') выдаст ошибку, потому что она не относится к типу keyof (T[keyof T]) .

Как мне ограничить приведенный выше пример, чтобы разрешить только строку second в качестве второго параметра, если нет keyof (T[keyof T]) ?

Изменить: ссылка на игровую площадку

Комментарии:

1. Путем аннотирования testObj , как D вы явно сказали компилятору, чтобы он рассматривал его как D , а не какой-либо более конкретный тип, который был у инициализатора. Можете ли вы удалить аннотацию и просто написать const testObj = {...} без D нее ? Если нет, то почему?