Как исправить неуместный тип в Typescript без использования ключевого слова «any»

#javascript #typescript #cryptojs

#javascript #typescript #cryptojs

Вопрос:

У меня есть проект TypeScript, который использует библиотеку CryptoJS. Линтер показывает, что свойство ‘sigBytes’, которое я цитирую, не существует для типа ‘DecryptedMessage’. Где я могу без проблем зарегистрировать это свойство в консоли. Код, который выдает это сообщение:

 let dec = CryptoJS.AES.decrypt(text, this.key, {iv: this.iv});
console.log(dec.sigBytes); // There it logs the property correctly
 

Я получил определение типов из npm. Я попытался настроить переменную dec как CryptoJS.LibWordArray вот так:

 let dec: CryptoJS.LibWordArray = CryptoJS.AES.decrypt(text, this.key, {iv: this.iv});
 

Но линтер показывает, что «в типе ‘DecryptedMessage’ отсутствуют следующие свойства из типа ‘LibWordArray’: sigBytes, words»

Код работает нормально, однако мне интересно, как лучше всего исправить эту или подобные проблемы. Использование any не дает предупреждений,

 let dec: CryptoJS.LibWordArray = CryptoJS.AES.decrypt(text, this.key, {iv: this.iv});
 

но я не уверен, что это хорошая практика

Комментарии:

1. Лучшим вариантом было бы отправить запрос на извлечение в DefinitelyTyped для добавления типов, которые должны существовать, но не существуют

Ответ №1:

Вы можете попробовать использовать утверждение типа: https://www.typescriptlang.org/docs/handbook/basic-types.html#type-assertions

Ответ №2:

Решена проблема с ключевым словом as (благодаря предложению @Budaa):

 let dec = CryptoJS.AES.decrypt(text, this.key, {iv: this.iv}) as CryptoJS.LibWordArray;