ПоведениеСубъект типа в угловых - PullRequest
0 голосов
/ 05 апреля 2019

Допустим, у меня есть модель User.

Я хочу создать BehaviorSubject типа User, как показано ниже:

 private userSource = new BehaviorSubject<User>({});

С этим утверждением я получаю следующую ошибку:

  Argument of type '{}' is not assignable to parameter of type 'User'

Может ли кто-нибудь помочь мне, как определить BehaviorSubject типа User

Ответы [ 6 ]

3 голосов
/ 05 апреля 2019

new BehaviorSubject<User>({}) с этим вы передали начальное значение для BehaviorSubject. Причина {} не имеет определения типа, вы получаете ошибку.

Вам необходимо передать тип User. Укажите свойства для этого типа в {} как

private userSource = new BehaviorSubject<User>({ /* properties */ });

Если вам не нужно начальное значение. Вы можете использовать ReplaySubject с количеством повторов, установленным на 1

new ReplaySubject<User>(1)

Это обеспечит ту же функциональность без начального значения.

0 голосов
/ 05 апреля 2019

Необходимо указать значение (которое удовлетворяет типу модели "Пользователь") вместо "{}"

Например, если ваша модель пользователя выглядит следующим образом:

export interface User {
    name: string;
    id: string;
}

Тогда ваш предмет поведения будет выглядеть так:

private userSource = new BehaviorSubject<User>({ 
     name: 'xyz',
     id: 'xyz'
});

или

Вы можете сделать все свойства в пользовательской модели необязательными, например:

export interface User {
    name?: string;
    id?: string;
}
0 голосов
/ 05 апреля 2019

По определению, BehaviorSubject требует начального значения:

Субъект, которому требуется начальное значение и который выдает текущее значение новым подписчикам

Данное начальное значение ({} в вашем случае) несовместимо с вашим типом User, который, вероятно, имеет некоторые обязательные поля.

Итак, создайте пользователя:

const user: User = [...];
private userSource = new BehaviorSubject<User>(user);

Если у вас нет начального значения, вы можете выбрать ReplaySubject вместо

0 голосов
/ 05 апреля 2019

Вам необходимо передать User тип.{} - это начальное значение, которое не соответствует схеме / типу User.
Incase, вы хотите передать пустое значение, используя null, за исключением {}

0 голосов
/ 05 апреля 2019

Это потому, что {} - это объект, который не обладает такими же свойствами, как User (на самом деле это пустой объект).

Вы можете передать это, приведя {} к any:

new BehaviorSubject<User>({} as any);
0 голосов
/ 05 апреля 2019

Тип User имеет некоторые свойства, которые должны иметь Следовательно, пустой {} объект не может быть назначен как экземпляр User

Например, приведенное ниже определение User отличается от {}:

interface User {
  name: string;
  address: string;
}

Изменение приведенного выше условного свойства ? позволит назначить пустой объект {} как user.

Пример:

interface User {
  name?: string;
  address?: string;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...