Angular 无法在Typescript中使用类中的服务

Angular 无法在Typescript中使用类中的服务,angular,typescript,Angular,Typescript,我试图在一个类中使用一个服务,然后实例化该类,但我一直得到 Argument of type 'typeof SearchService' is not assignable to parameter of type 'SearchService'. Property 'apiService' is missing in type 'typeof SearchService'. 但是,当我将私有服务更改为typeofSearchService时,我无法再调用它的方法-如何在我的Initia

我试图在一个类中使用一个服务,然后实例化该类,但我一直得到

Argument of type 'typeof SearchService' is not assignable to parameter of type 'SearchService'.
  Property 'apiService' is missing in type 'typeof SearchService'.
但是,当我将私有服务更改为typeof
SearchService
时,我无法再调用它的方法-如何在我的InitialDataset类中使用此服务

api.service.ts

import { Injectable } from '@angular/core';
import { environment } from '../../../environments/environment';
import { Headers, Http, Response, URLSearchParams } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

@Injectable()
export class ApiService {
    constructor(
        private http: Http
    ) { }
...
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

import { ApiService } from './api.service';
import { AssetList } from '../models';

@Injectable()
export class SearchService {
    constructor(
        private apiService: ApiService
    ) { }

    getInitialCollections(): Observable<AssetList> {
        return this.apiService.post('/cmt-api/search/merch/collections/_search');
    }

    getCollections(searchText: string | null): Observable<AssetList> {
        return this.apiService.post(`/cmt-api/search/merch/collections/_search?searchText=${searchText}`);
    }
}
search.service.ts

import { Injectable } from '@angular/core';
import { environment } from '../../../environments/environment';
import { Headers, Http, Response, URLSearchParams } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

@Injectable()
export class ApiService {
    constructor(
        private http: Http
    ) { }
...
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

import { ApiService } from './api.service';
import { AssetList } from '../models';

@Injectable()
export class SearchService {
    constructor(
        private apiService: ApiService
    ) { }

    getInitialCollections(): Observable<AssetList> {
        return this.apiService.post('/cmt-api/search/merch/collections/_search');
    }

    getCollections(searchText: string | null): Observable<AssetList> {
        return this.apiService.post(`/cmt-api/search/merch/collections/_search?searchText=${searchText}`);
    }
}
从'@angular/core'导入{Injectable};
从'rxjs/Rx'导入{Observable};
导入'rxjs/add/operator/map';
导入“rxjs/add/operator/catch”;
从“/api.service”导入{ApiService};
从“../models”导入{AssetList};
@可注射()
导出类搜索服务{
建造师(
私人apiService:apiService
) { }
getInitialCollections():可观察{
返回此.apiService.post('/cmtapi/search/merch/collections/_search');
}
getCollections(searchText:string | null):可观察{
返回此.apiService.post(`/cmtapi/search/merch/collections/_search?searchText=${searchText}`);
}
}
初始数据集类:

export class InitialDataset {

    /** Stream that emits whenever the data has been modified. */
    dataChange: BehaviorSubject<Asset[]> = new BehaviorSubject<Asset[]>([]);
    get data(): Asset[] { return this.dataChange.value; }

    constructor(private searchService: SearchService) {
        // Fill up the dataset with initialData.
        this.addAssets();
    }

    /** Adds a new asset to the dataset. */
    addAssets() {
        this.searchService.getInitialCollections()
            .subscribe(assets => {
                let results = assets.data
                results.map(asset => this.dataChange.next(asset));
            }, err => {
                console.log(err)
            });
    }
}



exampleDatabase = new InitialDataset(SearchService); // Error
导出类InitialDataset{
/**每当数据被修改时发出的流*/
dataChange:BehaviorSubject=新的BehaviorSubject([]);
获取数据():资产[]{返回this.dataChange.value;}
构造函数(专用搜索服务:搜索服务){
//用initialData填充数据集。
这是addAssets();
}
/**将新资源添加到数据集*/
addAssets(){
this.searchService.getInitialCollections()
.认购(资产=>{
让结果=assets.data
map(资产=>this.dataChange.next(资产));
},err=>{
console.log(错误)
});
}
}
exampleDatabase=新的初始数据集(SearchService);//错误
您的类使用了
搜索服务的一个实例

SearchService
类本身不是实例,因此会出现错误


您需要使用
new
或Angular injection创建一个实例。

private http:typeof http
ok已编辑,不是最新的代码-正在尝试解决issueOP,您可能需要在此处阅读typescript中的类:,特别是,高级技术部分以及类实例类型与类构造函数类型之间的区别。重点是,所有这些实例都需要一个参数,所以我必须做一些类似于new SearchService(new ApiService(???)的事情,一直到ApiService需要作为参数的Http模块,并且我得到类型为“TypeOfHTTP”的参数不能分配给类型为“Http”的参数。类型“typeof Http”中缺少属性“_backend”。但是,当我尝试传递新的InitialDataset(new SearchService())时,Angular@Inject会有所帮助我得到错误[ts]期望1个参数,但得到0。(别名)new SearchService(apiService:apiService):SearchService导入SearchService基本上它最终看起来是这样的:new InitialDataset(new SearchService)(new apiService(new Http(????)));如何避免这种情况?您需要使用Angular来注入具有依赖关系的实例。也许我可以使用@Injectable将InitialDataset移出到另一个服务,谢谢