Я хочу создать экземпляр класса из объекта, который имеет ту же форму, что и класс.
Вот что я пытаюсь:
// The generic type of the object the constructor will use
type PropObj<T> = { [K in keyof T]: T[K] };
class Item {
prop1: string;
prop2: number;
constructor(propObj: PropObj<Item>) {
// loop through all keys inside `propObj` and use it to assign Item's values
for (const key in propObj) {
const val = propObj[key]; // Element implicitly has an 'any' type because type 'PropObj<Item>' has no index signature.
this[key] = val; // Element implicitly has an 'any' type because type 'Item' has no index signature.
}
}
}
Однако внутри цикла val
имеет тип any
, потому что type 'PropObj<Item>' has no index signature
.
Почему TS не понимает, что propObj[key]
имеет тип T[K]
, и как я могу заставить его это сделать?