Тип 'string' нельзя назначить строковому литералу, когда он помещен в Observable - PullRequest
0 голосов
/ 30 октября 2018

Дано:

interface Abc {
  abcmethod: 'one' | 'two';
}

эта строка вызовет ошибку

const obj: Observable<Abc> = of({ abcmethod: 'one' });

где

import { of } from 'rxjs';

Ошибка:

TS2322: 
Type 'Observable<{ abcmethod: string; }>' is not assignable to type 'Observable<Abc>'.   
Type '{ abcmethod: string; }' is not assignable to type 'Abc'.     
Types of property 'abcmethod' are incompatible.       
Type 'string' is not assignable to type '"one" | "two"'.

пока без наблюдаемого все нормально

const obj: Abc = { abcmethod: 'one' };

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Необходимо установить границы типа для значения свойства на 'one' | 'two', иначе TypeScript предполагает, что значение имеет тип string, который не совместим с вашим типом. Правильное решение будет:

const obj: Observable<Abc> = of({ abcmethod: (<'one' | 'two'> 'one') });
0 голосов
/ 30 октября 2018

Исправлено - вручную приводить литералы объекта

.
const obj: Observable<Abc> = of({ abcmethod: 'one' } as Abc);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...