“错误”类型上不存在属性“代码”

Posted

技术标签:

【中文标题】“错误”类型上不存在属性“代码”【英文标题】:Property 'code' does not exist on type 'Error' 【发布时间】:2017-03-01 15:52:13 【问题描述】:

如何访问 Error.code 属性? 我收到 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
)

或者还有其他方法可以制作自定义错误消息吗?我想用另一种语言显示错误。

【问题讨论】:

【参考方案1】:

您必须从 catch 将类型转换为错误参数,即

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

也可以通过这种方式直接访问code属性

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

【讨论】:

【参考方案2】:

真正的问题是 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);
)

这似乎是 Node 定义中的一个缺陷,因为它与 new Error() 中的对象实际包含的内容不一致。 TypeScript 将强制执行接口错误定义。

【讨论】:

不是一个完整的解决方案。完整的解决方案还将显示需要添加的导入语句才能“拥有”NodeJS 符号。 @SzczepanHołyszewski 这个答案对我很有效,不需要额外的import【参考方案3】:
export default class ResponseError extends Error 
    code: number;
    message: string;
    response: 
        headers:  [key: string]: string; ;
        body: string;
    ;

【讨论】:

以上是关于“错误”类型上不存在属性“代码”的主要内容,如果未能解决你的问题,请参考以下文章

错误 TS2339:类型“Y”上不存在属性“x”

“HammerInput”类型上不存在属性“maxPointers”

“EventTarget”类型上不存在属性“值”

错误 TS2339:类型“”上不存在属性“包含”

角度:错误 TS2339:“对象”类型上不存在属性“数据”

错误 TS2339:“FormData”类型上不存在属性“条目”