如何解决组合扩展不同类/接口/类型打字稿的接口
我有各种接口可以扩展不同的 mongodb/mongoose 错误。我是打字稿的新手,这可能很明显,如果是这样的话,很抱歉。如果你们有解决方案,请解释它/提供指向文档的链接。
好吧,让我们来看看代码......我的接口 -
interface IError extends Error {
statusCode: number;
status: string;
isOperational: boolean;
code?: string;
keyName?: keyName;
keyPattern?: keyPattern;
}
interface ICastError extends CastError {
code?: string;
statusCode: number;
status: string;
isOperational: boolean;
keyName?: keyName;
keyPattern?: keyPattern;
}
interface IMongoError extends MongoError {
statusCode: number;
status: string;
isOperational: boolean;
keyPattern?: object;
errors: {
[key: string]: {
message: string;
name: string;
};
};
code?: string;
keyName?: keyName;
}
正如你所看到的,除了我不得不在所有接口中放置属性,因为我使用它们的代码是这样的 -
let error: IError | ICastError | IMongoError = Object.assign(err);
if (error.name == 'CastError') error = handleCastErrorDB(error as ICastError);
if (error.name == 'ValidationError') error = handleValidationErrorDB((error as unkNown) as IMongoError);
if (error.code == '11000') error = handleDuplicateFieldsDB((error as unkNown) as IMongoError);
if (error.isOperational) {
res.status(error.statusCode).json({
status: error.status,message: error.message,});
} else {
// Some irrelevant functionality
}
我使用过这样的接口 - IError | ICastError | IMongoError
。因此,当我没有在所有 3 个接口中使用的每一个属性都说“{someproperty} 未在接口 {someinterface} 中定义”时,打字稿吓坏了。有很多代码重复,我很想用一种方法来重构它。如果我问的是不可能的,我也可以重构我实现接口的方式(IError | ICastError | IMongoError
部分)。
提前致谢!这可能看起来很简单/显而易见,但请帮帮我。
PS:我没有在标签中包含 mongoDB,因为我认为它与手头的问题没有真正的关系。如果您不了解 mongoDB,那么只需假设这些接口 IError | ICastError | IMongoError
与任何其他接口一样,每个接口都有一些示例属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。