#node.js #typescript
Вопрос:
Всем привет, я написал код для шифрования строк, но теперь я хочу расшифровать их для следующего процесса, это мой код .
export const decrypt = (text: string) =gt; { try { if (!ENCRYPTION_KEY) { throw new Error("encrypt_Key is not set"); } const texts = text; let textParts = texts.split(":"); let iv = Buffer.from(textParts.shift(), "hex"); // this error here with no overload Overload 1 of 4, '(arrayBuffer: WithImplicitCoercionlt;ArrayBuffer let encryptedText = Buffer.from(textParts.join(":"), "hex"); let decipher = createDecipheriv( "aes-256-cbc", Buffer.from(ENCRYPTION_KEY), iv ); let decrypted = Buffer.concat([ decipher.update(encryptedText), decipher.final(), ]); return decrypted.toString(); } catch (e) { console.error(e); } };
Ответ №1:
Вызов не соответствует какой-либо перегрузке Buffer.from
. Buffer.from
принимает (string, encoding)
, но ваш звонок есть (string|undefined, encoding)
.
Typescript, в данном случае, уже помогает вам проверить переменную iv. И следит за тем, чтобы оно не было неопределенным.
Некоторые решения, чтобы исправить это
let textParts = texts.split(":"); // problem: typeof textParts.shift() = string | undefined let iv = Buffer.from(textParts.shift(), "hex"); // if you want to use default value iv = Buffer.from(textParts.shift() || "your default value", "hex"); // if you want to handle error, validate your value before put it in the call const strIV = textParts.shift() if(!strIV) { throw new Error("INVALID_FORMAT") } let iv = Buffer.from(strIV, "hex"); // if you're 100% sure that it can not be undefined let iv = Buffer.from(textParts.shift() as string, "hex"); // cast to string let iv = Buffer.from(textParts.shift()!, "hex"); // non-null assertion
Я думаю, что второе соответствует вашему коду, как я вижу в вопросе.
Комментарии:
1. спасибо вам за ваши предложения . Я покончил с этим , но он все еще показывает ошибку