Ошибка TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}'
import odbc = require('../../node_modules/odbc');
export default class Database {
private static connectionString = "...";
public static async executeScalar(sql: string): Promise<number> {
const connection = await odbc.connect(Database.connectionString);
const answer = await connection.query(sql);
return answer[0][answer.columns[0].name]; // Ошибка
}
}
Функция odbc.Connection.query(sql) возвращает
odbc.Result<unknown> (в JS это generic тип) в нем:
по индексу (number) - строка ответной таблицы (тот самый unknown, но по идее {string, any}):
поле columns - список столбцов (odbc.ColumnDefinition[]) в каждом элементе:
dataType - тип данных, согласованный с SQL (number)
name - имя столбца (string)
Пробовал поместить значение answer.columns[0].name в переменную с типом any, и только затем передавать переменную в качестве индекса, но не помогло (string в тексте ошибки изменилось на any).
Ответы (1 шт):
Автор решения: DeWo Prg
→ Ссылка
Спустя пару часов поисков нашел следующее решение:
нужно явно определить тип данных для переменной answer, чтобы вместо стандартного odbc.Result<unknown> было odbc.Result<{[index:string]:any}>, тогда все будет прекрасно работать.