如何在不使用关键字的情况下修复 Typescript 中错位的类型 "any"
How to fix misplaced type in Typescript without using keyword "any"
我有一个使用 CryptoJS 库的 TypeScript 项目。 linter 显示我引用 属性 'sigBytes' does not exist on type '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});
但是 linter 显示“类型 'DecryptedMessage' 缺少类型 'LibWordArray' 中的以下属性:sigBytes,words”
代码运行良好,但我想知道解决此问题或类似问题的最佳做法。使用 any 不会产生警告,
let dec: CryptoJS.LibWordArray = CryptoJS.AES.decrypt(text, this.key, {iv: this.iv});
但我不确定这是一个好的做法
您可以尝试使用类型断言:https://www.typescriptlang.org/docs/handbook/basic-types.html#type-assertions
解决了关键字 as 的问题(感谢@Budaa 的建议):
let dec = CryptoJS.AES.decrypt(text, this.key, {iv: this.iv}) as CryptoJS.LibWordArray;
我有一个使用 CryptoJS 库的 TypeScript 项目。 linter 显示我引用 属性 'sigBytes' does not exist on type '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});
但是 linter 显示“类型 'DecryptedMessage' 缺少类型 'LibWordArray' 中的以下属性:sigBytes,words”
代码运行良好,但我想知道解决此问题或类似问题的最佳做法。使用 any 不会产生警告,
let dec: CryptoJS.LibWordArray = CryptoJS.AES.decrypt(text, this.key, {iv: this.iv});
但我不确定这是一个好的做法
您可以尝试使用类型断言:https://www.typescriptlang.org/docs/handbook/basic-types.html#type-assertions
解决了关键字 as 的问题(感谢@Budaa 的建议):
let dec = CryptoJS.AES.decrypt(text, this.key, {iv: this.iv}) as CryptoJS.LibWordArray;