Частицы в TypeScript getter / setters - PullRequest
0 голосов
/ 11 мая 2018

В Angular я разрешаю компонентный ввод для установки параметров, скажем, типа IOptions В установщике он не должен быть завершен, поскольку он будет объединен с параметрами по умолчанию, поэтому он набирается как Partial<IOptions>.

const DEFAULT_OPTIONS = { prop1: false, prop2: 123 };

export class MyComponent {
  _options: IOptions;

  get options(): IOptions {
    return this._options;
  }

  @Input('config')
  set options(userOptions: Partial<IOptions>) {
    this._options = { ...DEFAULT_OPTIONS, ...userOptions };
  }
}

С другой стороны, геттер всегда должен возвращать полный, а не частичный объект, поэтому типом является IOptions.Но компилятор жалуется на то, что getter и setter не имеют идентичных типов.Как мне это решить?

1 Ответ

0 голосов
/ 11 мая 2018

Вы не можете сделать это в Typescript, так как getter и setter должны быть одного типа, поэтому вы можете изменить все на Partial<IOptions> или

есть другое решение для вашего первоначального требования

определить ваш параметр как класс с дополнительными свойствами и значениями по умолчанию, как показано ниже

export class MyComponentOption {
   prop1?: boolean = false;
   prop2?: number = 123;

   constructor(params: MyComponentOption ) {
     Object.assign(this, params)
   }
}

тогда

export class MyComponent {
  @Input('config') options : MyComponentOption;
}

и вот как вы можете установить его с некоторыми параметрами

config:MyComponentOption = new MyComponentOption({prop1:true});
...