programing

속성 'code'가 'Error' 유형에 없습니다.

nicescript 2023. 6. 11. 21:45
반응형

속성 'code'가 'Error' 유형에 없습니다.

Error.code 속성에 액세스하려면 어떻게 해야 합니까?속성 'code'가 'Error' 유형에 존재하지 않기 때문에 Typescript 오류가 발생합니다.

this.authCtrl.login(user, {
   provider: AuthProviders.Password,
   method: AuthMethods.Password
}).then((authData) => {
    //Success
}).catch((error) => {
   console.log(error); // I see a code property
   console.log(error.code); //error
})

실제 문제는 Node.js 정의 파일이 올바른 오류 정의를 내보내지 않는다는 것입니다.오류에 대해 다음을 사용하며 오류는 내보내지 않습니다.

interface Error {
    stack?: string;
}

내보내는 실제 정의는 NodeJS 네임스페이스에 있습니다.

export interface ErrnoException extends Error {
    errno?: number;
    code?: string;
    path?: string;
    syscall?: string;
    stack?: string;
}

따라서 다음 유형캐스트가 작동합니다.

.catch((error: NodeJS.ErrnoException) => {
    console.log(error);
    console.log(error.code);
})

이것은 new Error()의 객체가 실제로 포함하는 내용과 일치하지 않기 때문에 Node의 정의에 결함이 있는 것 같습니다.TypeScript는 인터페이스 오류 정의를 적용합니다.

캐치에서 오류 매개변수에 유형을 캐스팅해야 합니다.

.catch((error:any) => {
    console.log(error);
    console.log(error.code);
});

또는 이러한 방식으로 코드 속성에 직접 액세스할 수 있습니다.

.catch((error) => {
    console.log(error);
    console.log(error['code']);
});

https://stackoverflow.com/a/49562477 의 @Brent에서 설명한 것처럼 이 문제는 Typescript 패키지의 불완전한 유형 정의로 인해 발생합니다(https://github.com/microsoft/TypeScript/blob/ed6889cd5b61b9fa5156018362d867def18e281d/lib/lib.es5.d.ts#L1039-L1043) 참조).ECMA스크립트 2015 이상을 사용하는 사용자는 모듈 선언을 사용하여 누락된 속성을 선언할 수도 있습니다.이 작업은 다음 코드를 내부에 배치하여 수행할 수 있습니다.@types/global.d.ts파일.

declare interface Error {
  name: string
  message: string
  stack?: string
  code?: number | string
}
export default class ResponseError extends Error {
    code: number;
    message: string;
    response: {
        headers: { [key: string]: string; };
        body: string;
    };
}

언급URL : https://stackoverflow.com/questions/40141005/property-code-does-not-exist-on-type-error

반응형