#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 ;
}