#typescript #eslint
#машинописный текст #eslint
Вопрос:
Из-за проверок —strict_checks и typescript eslint я пытаюсь исправить некоторые новые ошибки в своем коде. Ниже приведены примеры кода для всего, что я объясняю. Допустим, у меня есть объект a, и я хочу напрямую указать его как карту, чтобы обойти некоторые ошибки. Я не могу использовать ключевое слово «любой». Это то, что я пытаюсь сделать:
isEquivalent(a: Object, b: Object): boolean {
const aObject: {[index: string]: Object} = a;
const bObject: {[index: string]: Object} = b;
}
Ссылка на игровую площадку typescript с фактическим фрагментом кода: здесь
Но это выдает ошибку:
ошибка TS2322: тип ‘Object’ не может быть присвоен типу ‘{[index: string]: Object; }’. Тип «Объект» может быть присвоен очень немногим другим типам. Вы имели в виду использовать вместо этого тип «любой»? Подпись индекса отсутствует в типе «Объект».
Кто-нибудь может указать мне на решение для типа, чтобы указать объект как, без использования ‘any’? Или, если это невозможно, пожалуйста, дайте мне знать.
Комментарии:
1. Внесены изменения, которые вы просили.
Ответ №1:
const aObject: {[index: string]: Object} = a;
присваивает a
(типа Object
) aObject
(типа {[index: string]: Object}
, объекту со строковыми именами свойств и Object
значениями свойств). Но Object
не совместим с присваиванием {[index: string]: Object}
, поэтому TypeScript выдает эту ошибку.
Если вы хотите принудительно выполнить это, вы можете выполнить утверждение типа:
const aObj = a as {[index: string]: Object};
Обновлена ссылка на игровую площадку
Но имейте в виду, что утверждения типа в основном отключают проверку типов TypeScript. Вызывающий может передать {a: 42}
, что не является a {[index: string]: Object}
, и TypeScript разрешил бы это, потому что вы сказали, что параметр просто Object
, но тогда вы рассматриваете его как {[index: string]: Object}
.
Иногда это уместно, но вы могли бы рассмотреть возможность присвоения параметрам типа {[index: string]: Object}
вместо использования утверждения типа внутри функции. Таким образом, TypeScript может гарантировать, что передаются только правильно введенные объекты.