#javascript #typescript #eslint #typescript-eslint
#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);
}
};
Это выдает ошибку,
export const connectDb: Promise<void> = async () => {
^^^^^^^^^^^^^
Type '() => Promise<void>' is missing the following properties
from type 'Promise<void>': then, catch, [Symbol.toStringTag], finally
Если я сделаю any
вместо Promise<void>
, ошибка исчезнет, но это, очевидно, не то, как я пытаюсь это сделать. Как я могу исправить эту ошибку lint?
Комментарии:
1. Потому что вы назначаете функцию
connectDb
, а не обещание. Либо вам нужно, чтобы тип был() => Promise<void>
, либо измените его, чтобы значением была выполняемая функция (возможно, с помощью IIFE).2. Кроме того, это не ошибка lint — это ошибка компилятора . TS выполняет свою работу правильно, предупреждая вас о том, что то, что вы хотите иметь как
connectDb
и то, что у вас на самом деле есть дляconnectDb
, не совпадает.3. Установка значения
export const connectDb = async (): Promise<void> => {
сработало, спасибо. Я просто хочу отметить, что это существующий проект с TS, и только час назад я решил добавить к нему ESLint, следуя этому руководству, и именно тогда я начал получать эту ошибку. Еще раз спасибо4. Я получаю эту ошибку, когда пробую код в ссылке Playground
Ответ №1:
Проблема в объявлении функции. Вам нужно указать возвращаемый тип как 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);
}
};
Ответ №2:
Асинхронные функции в typescript возвращают значение обещания.
вот так:
export const dbConnections: any = {};
export const connectDb: () => Promise<void> = async () => {
...
};