ESlint 错误,类型 '() => Promise<void>' 缺少类型 'Promise<void>' 中的以下属性:then、catch、[Symbol.toStringTag]、finally

Mik*_*e K 6 javascript typescript eslint typescript-eslint

我收到一个错误,只能通过添加any作为返回值来修复。

export const dbConnections: any = {};

export const connectDb: Promise<void> = async () => {
    if (dbConnections.isConnected) {
        return;
    }

    try {
        const db = await mongoose.connect(config.get('mongoURI'), {
            useNewUrlParser: true,
            useUnifiedTopology: true,
            useFindAndModify: false,
            useCreateIndex: true,
        });

        dbConnections.isConnected = db.connections[0].readyState;
    } catch (err) {
        createError('Error caught connecting to db!', err);
    }
};
Run Code Online (Sandbox Code Playgroud)

这会引发错误,

export const connectDb: Promise<void> = async () => {
                                        ^^^^^^^^^^^^^
Type '() => Promise<void>' is missing the following properties
  from type 'Promise<void>': then, catch, [Symbol.toStringTag], finally
Run Code Online (Sandbox Code Playgroud)

如果我这样做any而不是Promise<void>,那么错误就会消失,但这显然不是我想要解决的问题。我该如何修复这个 lint 错误?

Shi*_*dey 3

问题出在函数声明中。您需要将返回类型指定为Promise<void>

export const connectDb = async (): Promise<void> => {
    if (dbConnections.isConnected) {
        return;
    }

    try {
        const db = await mongoose.connect(config.get('mongoURI'), {
            useNewUrlParser: true,
            useUnifiedTopology: true,
            useFindAndModify: false,
            useCreateIndex: true,
        });

        dbConnections.isConnected = db.connections[0].readyState;
    } catch (err) {
        createError('Error caught connecting to db!', err);
    }
};
Run Code Online (Sandbox Code Playgroud)