Как создать объект в Typescript, избегая инициализации свойств GET? - PullRequest
0 голосов
/ 05 мая 2020

если объявить класс

class MyClass {
   a: number;
   get b(): number { return this.a * 2 };
}

Мне интересно, почему, когда я инициализирую объект типа «MyClass», требуется свойство «b», даже если оно просто свойство readonly (get)

пример кода:

var myObject: MyClass = { a: 10 };

, поэтому это приведет к ошибке машинописного текста:

Свойство 'b' отсутствует в типе '{a: number; } ', но требуется в типе' MyClass '.

1 Ответ

0 голосов
/ 06 мая 2020

Вы не можете создать объект, подобный классу, вам нужно вызвать конструктор с new

class MyClass {
   get b(): number { return this.a * 2 };
   constructor(public a: number) { }
}

var myObject: MyClass = new MyClass(10);

, и теперь у вас есть доступ к a и b свойству

console.log(myObject.a, myObject.b);

UPDATE

также вы можете сделать что-то вроде этого, когда вы создаете класс из json / interface

interface IMyInterface {
  a: number
}

class MyClass implements IMyInterface {
  a: number;
  get b(): number { return this.a * 2 };
  constructor(json: IMyInterface) {
    this.a = json.a;
  }
}

const myObject = new MyClass({a: 10});

или если вы хотите автоматически инициализировать все члены от интерфейса к классу

constructor(json: IMyInterface) {
  Object.keys(json).forEach(key => {
    this[key] = json[key];
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...