Typescript 区分两个相似的物体

Typescript 区分两个相似的物体,typescript,Typescript,我有一段代码: interface MysqlError extends Error { /** * Either a MySQL server error (e.g. 'ER_ACCESS_DENIED_ERROR'), * a node.js error (e.g. 'ECONNREFUSED') or an internal error * (e.g. 'PROTOCOL_CONNECTION_LOST'). */ code: str

我有一段代码:

interface MysqlError extends Error {
    /**
     * Either a MySQL server error (e.g. 'ER_ACCESS_DENIED_ERROR'),
     * a node.js error (e.g. 'ECONNREFUSED') or an internal error
     * (e.g. 'PROTOCOL_CONNECTION_LOST').
     */
    code: string;
}

function f(err: Error | MysqlError) {
    if (err.code) {
    } else {
    }
}
但我得到了以下错误:

Property 'code' does not exist on type 'MysqlError | Error'.
  Property 'code' does not exist on type 'Error'.
如何检查此函数中的类型


在这种情况下,我将在类型保护中使用
,以测试
code
属性是否存在:

interface MysqlError extends Error {
    code: string;
}

function f(err: Error | MysqlError) {

    if ('code' in err) {
        err.code // string
    } else {

    }
}

在本例中,我将在
类型保护中使用
,以测试
code
属性是否存在:

interface MysqlError extends Error {
    code: string;
}

function f(err: Error | MysqlError) {

    if ('code' in err) {
        err.code // string
    } else {

    }
}

涵盖联合类型的文档也涵盖了区分它们:@jornsharpe是的,文档涵盖了其中的一些,但不幸的是,它们没有涵盖在这里最有意义的
类型保护中的
:(@TitianCernicova Dragomir true;有关更多选项,请参见示例。但是
if((err).code){…}
是有文档记录的,可以很好地工作。可以说,它作为一种鉴别标准,更适合于自我记录。@jornsharpe实际上
if((err).code)
不能作为类型gurad使用,不幸的是,如果您需要继续施放,那么在中。涵盖联合类型的文档还包括区分它们:@jornsharpe是的,文档涵盖了其中一些类型,但不幸的是,它们没有涵盖
类型保护中的
,这在这里最有意义:(@TitianCernicova Dragomir true;参见示例了解更多选项。但是
if((err).code){…}
是有文档记录的,可以很好地工作。它可以说是一种更自我记录的鉴别方法。@jornsharpe实际上
if((err).code)
在if中不能作为类型gurad,不幸的是,如果你需要继续强制转换的话。。