угловая перегрузка 6 конструкторов - PullRequest
0 голосов
/ 13 сентября 2018

Я новичок в машинописи / ангулате.У меня уже есть конструктор, извлекающий JsonP.Я хочу создать новый конструктор для HttpClientModule.Это мой текущий код.

export class DataService {
    constructor(private _jsonp: Jsonp) {
        this.apikey = 'xxx';
    }
}

Это то, что я пытался ..

export class DataService {
    constructor(private _jsonp: Jsonp, private http: HttpClient) {
        this.apikey = 'xxx';
    }
}

Первый json API перестает работать.Я хочу что-то эквивалентное этому

export class DataService {
    constructor(private _jsonp: Jsonp) {
        this.apikey = 'xxx';
    }
    constructor(http: HttpClient) {}
}

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Для этого в Typescript это может выглядеть примерно так:По сути, вы предоставляете сигнатуры методов, а затем реализацию (которая должна обрабатывать все различные сигнатуры).

export class DataService {
    constructor(private _jsonp: Jsonp);
    constructor(http: HttpClient);

    // Implementation of the constructor
    constructor(api: Jsonp | HttpClient){
        // some sort of test to tell what type the parameter is
        if (/* api is Jsonp */) {
            // is Jsonp, not HttpClient
            this.apikey = 'xxx';
        }
    }
}
0 голосов
/ 13 сентября 2018

Перегрузка возможна в TypeScript, пожалуйста, смотрите этот вопрос: Перегрузка конструктора в TypeScript

Другой распространенной практикой является предоставление необязательного параметра для функций, которые могут содержать параметры. Что-то вроде:

export class DataService {
  constructor(private _jsonp: Jsonp, private http: HttpClient) {
    this.apikey = 'xxx';
  }

  get(params?, options?) {
    if (this.options && this.options.service === 'jsonp') {
     // use the _jsonp service
    } else {
     // user the http service
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...