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,不幸的是,如果你需要继续强制转换的话。。