微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

组合扩展不同类/接口/类型打字稿的接口

如何解决组合扩展不同类/接口/类型打字稿的接口

我有各种接口可以扩展不同的 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?