source

오류: 유형이 Promise 호환 생성자를 참조하지 않으므로 ES5/ES3에서 올바른 비동기 함수 반환 유형이 아닙니다.

manycodes 2023. 8. 4. 23:12
반응형

오류: 유형이 Promise 호환 생성자를 참조하지 않으므로 ES5/ES3에서 올바른 비동기 함수 반환 유형이 아닙니다.

나는 이 함수를 TypeScript로 작성했습니다.

export class LoginService {

  async isLoggedIn(): boolean {
    const r = await this.http.get('http://localhost:3000/api/user/isLoggedIn').toPromise();
    return r.body;
  }
}

Angular 6 응용 프로그램을 실행하려고 하면 다음 오류 메시지가 표시됩니다.

src/app/login에 오류가 있습니다.service.ts(28,23): 오류 TS1055:'boolean' 유형은 Promise 호환 생성자 값을 참조하지 않으므로 ES5/ES3에서 올바른 비동기 함수 반환 유형이 아닙니다.

저는 전에 이것을 누르지 않고 다른 애플리케이션에서 비동기/대기를 사용한 적이 있습니다.

업데이트: 답변하고 싶은 질문은 "isLoggedIn" 함수가 부울을 반환하도록 하려면 어떻게 해야 합니까?

async함수는 정의에 의해서만 약속을 반환할 수 있습니다 - 모두async함수는 약속을 반환합니다.부울을 반환할 수 없습니다.

TypeScript는 그렇게 말하고 있습니다.async함수는 부울로 해결되는 약속을 반환할 수 있습니다.

당신이 가진 가치return마음속에async함수는 약속의 해결된 값이 됩니다.async함수가 반환됩니다.그래서, 당신의 반품 타입은async함수는 약속입니다(부울로 해결됨).

의 발신자isLoggedIn()를 사용해야 합니다..then()그것과 함께 또는await그것과 함께.

export class LoginService {

    async isLoggedIn(): Promise<any> {
      const r = await this.http.get('http://localhost:3000/api/user/isLoggedIn').toPromise();
      return r.body;
    }

}

엔드포인트인 경우/api/user/isLoggedIn부울 값만 반환합니다. 아래에서는 http get 메서드를 캐스팅하여 사용할 수 있습니다.그러나 실제로 당신은 비동기 함수에서만 약속을 반환할 수 있습니다.

export class LoginService {
  async isLoggedIn(): Promise<boolean> {
    return this.http.get<boolean>('http://localhost:3000/api/user/isLoggedIn').toPromise();
  }
}

사용하는 비동기 기능이 있을 수 있습니다.isLoggedIn()다음과 같이:

async doSomething() {
  const loggedIn: boolean = await service.isLoggedIn();
  if (loggedIn) {
    doThis();
  }    
}

이런 식으로 부를 수도 있습니다.

await doSomething();

반환 유형은 약속이어야 합니다.

/* sync */ isLoggedIn(): boolean
async isLoggedIn(): Promise<boolean>

비동기 함수는 약속(비동기화를 위해 필수)을 반환하며, 사용자는 약속이 부울로 해결됨을 나타냅니다.

이 질문은 조회 수가 많기 때문에 좀 더 광범위한 유형의 (가능한) 솔루션을 제공하겠습니다.업데이트할 수 있는 경우tsconfig파일의target더 이상 오류가 발생하지 않을 현대적인 것에 가치를 둡니다.

내 경우:

// tsconfig.json

{
  "compilerOptions": {
    "target": "ESNext",
     ...
  }
}

계속하기 전에 프로젝트를 빌드/시작할 수 있고 모든 것이 정상인지 확인하십시오.

언급URL : https://stackoverflow.com/questions/52694418/error-type-is-not-a-valid-async-function-return-type-in-es5-es3-because-it-does

반응형