Я столкнулся с любопытной ошибкой присвоения Typescript и пытаюсь понять, почему это не работает. Для справки я использую TS 3.9.2
.
Код:
function test<U extends object>(a: U, k: keyof U) {
const x: Partial<U> = { [k]: a[k] };
// ...
}
Ошибка:
Type '{ [x: string]: U[keyof U]; }' is not assignable to type 'Partial<U>'.
Проблема возникает только тогда, когда я используя дженерики, например, если вместо U
я использую конкретный интерфейс, он работает должным образом.
Я предполагаю, что система типов не может правильно вывести ключи U
и используйте их во время задания, почему? Я проверяю тип k
внутри { [k]: a[k] }
, он правильно возвращает keyof U
, поэтому я не полностью понимаю, почему система типов не может использовать эту информацию, чтобы проверить, законно ли присвоение, и обобщить k
до string
.
Спасибо.