Как я могу создать экземпляр класса из объекта, который разделяет его интерфейс? - PullRequest
0 голосов
/ 11 мая 2018

Я хочу создать экземпляр класса из объекта, который имеет ту же форму, что и класс.

Вот что я пытаюсь:

// 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], и как я могу заставить его это сделать?

...