Аргумент типа ‘string’ не может быть присвоен параметру типа ‘string[]’

#typescript #observable

#typescript #наблюдаемый

Вопрос:

Я просматривал Интернет в поисках решения этой, вероятно, незначительной проблемы.

Моя функция на одном ts. файл:

 public getHelpContent(question: string[]) {

  let theHelp: any[] = [];
  theHelp = this.mssqlService.getTheHelpAnswer(question);
  console.log("THE HELP:", theHelp);
  this.commentContent = theHelp ;

  let foundContent: any[] = [];
  for (let i = 0; i < this.commentContent.length; i  ) {
    let hitContent: string[];
    hitContent = this.searchHelpItem(question, this.commentContent[i]);
    if (hitContent) {
      foundContent.push(hitContent);
    }
  }

  return theHelp;

}
  

Функция в файле mssql-service.ts

 getTheHelpAnswer(jsonObj: any): any {
  let body = JSON.stringify(jsonObj);
  console.log("BODY VAR: ", body);
  return this.http
    .post<any>(`${this.urlLocation}notification/TheHelp`, body)
    .map((response: Response) => response.json())
    .catch(this.handleError);
}
  

и ОШИБКА ОБРАБОТКИ для процветания…

 private handleError(error: Response | any) {

  let errMsg: string;
  if (error instanceof Response) {
    const body = error || '';
    const err = JSON.stringify(body);
    errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
  } else {
    errMsg = error.message ? error.message : error.toString();
  }
  console.error(errMsg);
  return Observable.throw(errMsg);
  

}

ошибка, которую я ПОЛУЧАЮ при компиляции, заключается в следующем:

 error TS2345: Argument of type 'string' is not assignable to parameter of type 'string[]'
  

Когда я изменяю :any здесь из:

 getTheHelpAnswer(jsonObj: any): any { 
  

Для

 getTheHelpAnswer(jsonObj: any): Observable<any> { ...
  

это ошибка, которую я получаю:

 ERROR in src/app/app-help-state-machine.ts(364,5): error TS2322: Type 'Observable<any>' is not assignable to type 'any[]'.
  Property 'includes' is missing in type 'Observable<any>'.
src/app/app-help-state-machine.ts(371,50): error TS2345: 
Argument of type 'string' is not assignable to parameter of type 'string[]'.
  

Я не понимаю, в чем проблема.

UPDATE1:

Я забыл добавить подпись ФУНКЦИИ

 public getHelpContent(question: string[]): any[] { ...
  

Но я все равно получаю это…

 ERROR in src/app/app-help-state-machine.ts(364,5): error TS2322: Type 
'Observable<any>' is not assignable to type 'any[]'.
      Property 'includes' is missing in type 'Observable<any>'.
src/app/app-help-state-machine.ts(371,50): error TS2345: Argument of type 'string' is not assignable to parameter of type 'string[]'.
  

ОБНОВЛЕНИЕ 2:

Я понял это…

Смотрите решение, в котором я ответил на свой собственный вопрос….

Комментарии:

1. единственная типизация для String[], которую я вижу, let hitContent: string[]; hitContent = this.searchHelpItem(question, this.commentContent[i]); поэтому я полагаю, что метод searchHelpItem возвращает строку вместо массива

2. this.searchHelpItem вероятно, возвращает строку, а не массив строк

3. ЧЕРТ ВОЗЬМИ, подпись должна быть: public getHelpContent(вопрос: string[]): any[] {… Я забыл:any[] но я все еще получаю те же ошибки… смотрите ОБНОВЛЕНИЕ1:

4. Стефан, Джонатан: у вас есть какие-нибудь идеи? Мне действительно нужно преодолеть этот блокировщик. Спасибо

Ответ №1:

Вот решение:

Я изменил эту функцию:

 public getHelpContent(question: string[]) {

  let theHelp: any[] = [];
  theHelp = this.mssqlService.getTheHelpAnswer(question);
  console.log("THE HELP:", theHelp);
  this.commentContent = theHelp ;

  let foundContent: any[] = [];
  for (let i = 0; i < this.commentContent.length; i  ) {
    let hitContent: string[];
    hitContent = this.searchHelpItem(question, this.commentContent[i]);
    if (hitContent) {
      foundContent.push(hitContent);
    }
  }

  return theHelp;

}
  

к этому:

 public getHelpContent(question: string[]): string[] {

  const questionInfo = {
    "question": question
  }

  let theHelp = this.mssqlService.getTheHelpAnswer(questionInfo, question);
  console.log("THE HELP:", theHelp);

//Commented this out... as it caused the issue

//    this.commentContent = theHelp;
//
//    let foundContent: any[] = [];
//    for (let i = 0; i < this.commentContent.length; i  ) {
//      let hitContent: string[];
//      hitContent = this.searchHelpItem(question, this.commentContent[i]);
//      if (hitContent) {
//        foundContent.push(hitContent);
//      }
//    }

  return lucyHelp;

}
  

и в файле mssql-connect.service.ts принимающая функция

Изменение этого:

 getTheHelpAnswer(jsonObj: any): any {
   let body = JSON.stringify(jsonObj);
   console.log("BODY VAR: ", body);
   return this.http
       .post<any>(`${this.urlLocation}notification/TheHelp`, body)
       .map((response: Response) => response.json())
       .catch(this.handleError);
}
  

к этому…

 getTheHelpAnswer(jsonObj: any, question: string[]): string[] {
   let body = JSON.stringify(jsonObj);
   console.log("BODY VAR: ", body);

   let result = this.http
     .post<any>(`${this.urlLocation}notification/TheHelp${question}`, body)
     .map((response: Response) => response.json())
     .catch(this.handleError);

   console.log("RESULT FROM HTTP: ", result);

  return result ;
}