Аргумент типа A не может быть назначен параметру типа B - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь позвонить в свой бэкэнд с помощью angular.У меня уже есть метод get / delete works.

Но у меня есть проблема с "POST".

Я использую swaggercode-gen для генерации всех своих классов в TS.

Но когда я выполняю вызов моей функции создания, у меня появляется это сообщение: «Аргумент сообщения типа Employee не может быть назначен параметру типа события»

Employee - это мой собственный класс.

Iмного чего попробуйте, я пытаюсь изменить свою форму, я пытаюсь изменить файл машинописного текста (он указывает, что нет).

Swagger-codegen генерирует для меня файл employee.ts, этот файл в порядке.

Он также генерирует файл employee.service.ts с моей функцией создания:

employee.service.ts:

public createEmployee(observe?: 'body', reportProgress?: boolean): Observable<any>;
public createEmployee(observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<any>>;
public createEmployee(observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<any>>;
public createEmployee(observe: any = 'body', reportProgress: boolean = false ): Observable<any> {

    let headers = this.defaultHeaders;

    // to determine the Accept header
    let httpHeaderAccepts: string[] = [
    ];
    const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);
    if (httpHeaderAcceptSelected != undefined) {
        headers = headers.set('Accept', httpHeaderAcceptSelected);
    }

    // to determine the Content-Type header
    const consumes: string[] = [
        'application/json'
    ];

    return this.httpClient.post<any>(`${this.basePath}/employees/createEmployee`,
        null,
        {
            withCredentials: this.configuration.withCredentials,
            headers: headers,
            observe: observe,
            reportProgress: reportProgress
        }
    );
}

Моя форма:

employee-form.component.html:

   <form #employeeForm="ngForm" (ngSubmit)="create()">
    <div class="form-group row">
          <label for="inputEmail3" class="col-sm-2 col-form-label">Matricule</label>
          <div class="col-sm-10">
              <input type="text" class="form-control" id="idEmployee" [(ngModel)]="employee.idEmployee" name="idEmployee"/>
          </div>
    </div>

    <div class="form-group row">
      <label for="inputEmail3" class="col-sm-2 col-form-label">Nom</label>
      <div class="col-sm-10">
          <input type="text" class="form-control" id="lastName" [(ngModel)]="employee.lastName"  name="lastName"/>
      </div>
    </div>.

   [...]

   <div class="form-group row">
      <div class="col-sm-1">
          <button type="submit" class="btn btn-primary">Créer</button>
      </div>
      <div class="col-sm-1">
        <a class="btn btn-secondary" href="javascript:history.go(-1)">Retour</a>
      </div>
    </div>
   </form>

Файл сценария моего типа:

employee-form.component.ts:

@Component({
  selector: 'adv-employee-form',
  templateUrl: './employee-form.component.html',
  providers: [EmployeeService],
  styles: []
})
export class EmployeeFormComponent implements OnInit {

  employee: Employee;

  constructor(private router: Router, private employeeService: EmployeeService) { }

  ngOnInit() {
  }

   create() {
     this.employeeService.createEmployee(this.employee)//<- The error appear here
       .pipe(finalize(() => this.router.navigate(['/employees-list']))).subscribe();
   }
}

Кажется так.employee не распознается правильно.

Я пытаюсь изменить employee-form.component.ts и установить: employee: any = Employee;

Ошибка исчезает.Но когда я публикую свою форму, у меня появляется ошибка:

ERROR Error: Unreachable: unhandled observe type [object Object]}

1 Ответ

0 голосов
/ 05 февраля 2019

Согласно вашему коду, ваш метод не ожидает параметра типа employee, также вы передаете его в теле. Я думаю, что вам нужно опубликовать объект employee, поэтому метод метода employee в службе должен быть

public createEmployee(model:any,observe: any = 'body', reportProgress: boolean = false ): Observable<any> {

    let headers = this.defaultHeaders;

    // to determine the Accept header
    let httpHeaderAccepts: string[] = [
    ];
    const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);
    if (httpHeaderAcceptSelected != undefined) {
        headers = headers.set('Accept', httpHeaderAcceptSelected);
    }

    // to determine the Content-Type header
    const consumes: string[] = [
        'application/json'
    ];

    return this.httpClient.post<any>(`${this.basePath}/employees/createEmployee`,
        model,
        {
            withCredentials: this.configuration.withCredentials,
            headers: headers,
            observe: observe,
            reportProgress: reportProgress
        }
    );
}
...