Угловая библиотека - Типу 'Subject<any []>' нельзя присвоить типу 'Subject<any []>'

Я следовал этому руководству, чтобы создать собственную угловую библиотеку, но столкнулся с проблемой довольно странной.

Идея, лежащая в основе упражнения, проста: создать каркас для определенной части функциональности (в данном случае это каталог персонала), где разработчик может установить его npm и предоставить собственный источник данных, который реализует наш интерфейс.

Этот интерфейс выглядит следующим образом

export interface ISDDataService {
refiners: Subject<Refiner[]>;
search(queryTxt: string): Observable<Staff[]>;
refine(refiner: Refiner): Observable<Staff[]>;
}

В библиотечном проекте этот скелет является модулем, на который ссылается корневой модуль, настроенный для предоставления источника данных, который наследует ISDDataService.

@Injectable()
export class AppService implements ISDDataService {
  refiners: Subject<Refiner[]>;
  staff: Staff[] = [];
  constructor() {
    this.staff.push(<Staff>{name: 'John Doe', role: 'xyz', group: 'A Team', image: ''});
    this.staff.push(<Staff>{name: 'Jane Doe', role: 'xyz', group: 'B Team', image: ''});
  }

  search(queryTxt: string): Observable<Staff[]> {
    return Observable.of(this.staff).map(o => this.staff);
  }

  refine(refiner: Refiner): Observable<Staff[]> {
    return ;
  }
}

Вот как предоставляется услуга (app.module.ts)

providers: [
    {
      provide: 'ISDDataService',
      useClass: AppService
    }
  ],

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

@Component({
  selector: 'app-search-results',
  templateUrl: './search-results.component.html',
  styleUrls: ['./search-results.component.css']
})
export class SearchResultsComponent implements OnInit {
  private results: Observable<Staff[]>;
  private searchField: FormControl;
  constructor(@Inject('ISDDataService') private service: ISDDataService) { }

  ngOnInit() {
    this.searchField = new FormControl();
    this.results = this.searchField.valueChanges
      .debounceTime(400)
      .distinctUntilChanged()
      .switchMap( term => this.service.search(term));
  }
}

Эта настройка работает как чудо, поэтому приступайте к упаковке, создайте tarball и создайте новое "тестовое" приложение, чтобы я мог импортировать модуль с помощью npm install (все эти шаги согласно посту в блоге). Пока все хорошо, ошибок при установке модуля нет.

Тестовое приложение является точной копией того, что я использовал при создании библиотеки. Те же AppServices, которые наследуют ISDDataService, тот же способ предоставления сервиса и т. Д. Я пытаюсь построить его, и все идет к черту. Ошибка не может быть более странной

ERROR in src/app/app.service.ts(9,14): error TS2420: Class 'AppService' incorrectly implements interface 'ISDDataService'.
  Types of property 'refiners' are incompatible.
    Type 'Subject<Refiner[]>' is not assignable to type 'Subject<Refiner[]>'. Two different types with this name exist, but they are unrelated.
      Types of property 'lift' are incompatible.
        Type '<R>(operator: Operator<Refiner[], R>) => Observable<R>' is not assignable to type '<R>(operator: Operator<Refiner[], R>) => Observable<R>'. Two different types with this name exist, but they are unrelated.
          Types of parameters 'operator' and 'operator' are incompatible.
            Type 'Operator<Refiner[], R>' is not assignable to type 'Operator<Refiner[], R>'. Two different types with this name exist, but they are unrelated.
              Types of property 'call' are incompatible.
                Type '(subscriber: Subscriber<R>, source: any) => TeardownLogic' is not assignable to type '(subscriber: Subscriber<R>, source: any) => TeardownLogic'. Two different types with this name exist, but they are unrelated.
                  Types of parameters 'subscriber' and 'subscriber' are incompatible.
                    Type 'Subscriber<R>' is not assignable to type 'Subscriber<R>'. Two different types with this name exist,
but they are unrelated.
                      Property 'isStopped' is protected but type 'Subscriber<T>' is not a class derived from 'Subscriber<T>'. 

Как это так "Subject<Refiner[]>' is not assignable to type 'Subject<Refiner[]>'" имеет смысл!! ​​??

Я сделал пару изменений здесь и там, но ничего не работает

Обратите внимание, что эта проблема не только для свойства уточнения. Если я уберу это, он будет касаться функций и так далее.

Я начинаю думать, что, возможно, этот подход не правильный... и здесь я подумал, что это было довольно чисто

во всяком случае, если кто-то может дать руку будет принята с благодарностью

0 ответов

Другие вопросы по тегам