Как использовать stringPropertyInitialization с Object.assign в Typescript - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть класс, подобный

export class Config{

    public doSomething: boolean;
    public doSomethingOptionally?: boolean

    constructor(data: {
        doSomething: boolean,
        doSomethingOptionally?: boolean
    }) {
        Object.assign(this, data);
    }
}

Передача данных в конструктор действительно очень проста, и IntelliSense достаточно умен, чтобы не позволять разработчикам создавать новый экземпляр класса Config без указания свойства doSomething,но это обходится без doSomethingOptionally.

Все это прекрасно работает, но как только я включаю strictPropertyInitialization в tsconfig.json, я получаю кучу ошибок, потому что doSomething не был инициализирован.

Какой лучший способ для этого?

Я не хочу:

  1. указывать значения по умолчанию (объекты могут быть очень большими)
  2. использовать doSomething: boolean = {} as any;
  3. присваивать значение в конструкторе за пределами свойства data, потому что может быть много параметров, и вызов конструктора станет на мой взгляд слишком уродливым
  4. Make doSomethingпринять неопределенные значения

1 Ответ

0 голосов
/ 20 ноября 2018

Одно из решений - сообщить компилятору, какие свойства инициализируются с помощью Object.assign, используя утверждение определенного присваивания

export class Config{

    public doSomething!: boolean;
    public doSomethingOptionally?: boolean

    constructor(data: {
        doSomething: boolean,
        doSomethingOptionally?: boolean
    }) {
        Object.assign(this, data);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...