Visual Studio не распознает тип возвращаемого значения NgRx ofType () (показывает, что тип не указан, по-прежнему компилируется и хорошо работает в браузере) - PullRequest
0 голосов
/ 02 января 2019

У меня есть следующий код, который использует NgRx Effect:

enter image description here

import { Injectable } from "@angular/core";
import { Actions, ofType, Effect } from "@ngrx/effects";
import { SearchContactService } from "../../search-contact.service";
import { Action } from "@ngrx/store";
import { Observable, of } from "rxjs";
import { SearchActionTypes, SearchTagResultAction, SearchKeywordResultAction } from "../actions/search.action";
import { mergeMap, map, debounceTime, distinctUntilChanged, filter } from "rxjs/operators";

@Injectable()
export class SearchEffects {

    @Effect()
    enterSearch$: Observable<Action> = this.actions$.pipe(
        ofType(SearchActionTypes.SearchEnterKeyword),
        filter(action => { return action && action.payload.keyword && action.payload.keyword.length }),
        debounceTime(300),
        distinctUntilChanged(),
        mergeMap(action => {
            let keyword = action.payload.keyword as string;

            if (keyword.startsWith("#")) {
                return this.searchContactService.searchTag(keyword.substr(1))
                    .pipe(
                        map(data => new SearchTagResultAction({
                            tags: data,
                        }))
                    );
            } else {
                return this.searchContactService.searchContact(keyword)
                    .pipe(
                        map(data => new SearchKeywordResultAction({
                            contacts: data,
                        }))
                    );
            }
        }),
    );

    constructor(
        private searchContactService: SearchContactService,
        private actions$: Actions) {

    }

}

Код компилируется и хорошо работает в браузере.Однако довольно досадно, что VS показывает ошибку при каждом параметре action.

У кого-нибудь есть эта проблема?Как я могу решить это?

РЕДАКТИРОВАТЬ: Я обнаружил, что это из-за метода ofType, а не сам pipe.До сих пор не могу понять, почему.

РЕДАКТИРОВАТЬ 2: После добавления типа для ofType еще одна ошибка присваивания.В браузере он все еще компилируется и запускается.Я даже пытался SearchActions (мой тип действия объединения), та же проблема все еще.

enter image description here

РЕДАКТИРОВАТЬ: нашел решение: использовать явный тип на mergeMapтоже:

mergeMap<SearchEnterKeywordAction, SearchActions>(action => {

1 Ответ

0 голосов
/ 02 января 2019

Вы должны ввести оператор ofType:

ofType<SearchEnterKeyword>(SearchActionTypes.SearchEnterKeyword),

Начиная с NgRx 7, вы также можете ввести Actions, введенный @ngrx/effects

constructor(private actions$: Actions<MyActionsUnion>) {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...