속성 '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
'programing' 카테고리의 다른 글
Panda.Int64 미래 경고에 대한 인덱스 수정 (0) | 2023.06.11 |
---|---|
MariaDB 버전 10.5.9를 설치할 수 없음 (0) | 2023.06.11 |
EPLUS 사용 스프레드시트에서 모든 셀을 TEXT로 포맷하려는 경우 (0) | 2023.06.11 |
TypeScript에서 일반 클래스의 정적 함수 호출 (0) | 2023.06.11 |
왜 파이썬 3.x의 슈퍼() 마법인가요? (0) | 2023.05.22 |