TSLint:表达式的类型为“ void”。将其放在一行上作为语句

问题描述 投票:0回答:1

[当我运行firebase deploy时,CLI应用程序运行TS编译器,TSLint抛出注释行上显示的错误:

express.get("/shopify/callback", async (req: Request, res: Response): Promise<Response|void> => {
 const {shop, code, state} = req.query;

 // parse the cookie string into an array. if state cookie is "", err
 const stateCookie = cookie.parse(req.headers.cookie as string || "").state;
 if (!stateCookie) return res.status(400).send("No state cookie");

 if (state !== stateCookie) return res.status(403).send('Cookie failed verification');

 const {hmac, ...params} = req.query;
 const queryParams = queryString.stringify(params);
 const hash = generateEncryptedHash(queryParams); // ERROR: /home/owner/PhpstormProjects/shopify/projectName/functions/src/index.ts:157:15 - Expression has type `void`. Put it on its own line as a statement.
 if (hash !== hmac) return res.status(400).send("HMAC validation failed");

我不知道它想要什么更改,有人知道如何处理此错误吗?这是在该行上运行的辅助函数:

const generateEncryptedHash = (params: unknown) => {
 if (typeof  SHOPIFY_API_SECRET === "string") {
  crypto.createHmac("sha256", SHOPIFY_API_SECRET).update(params as DataView).digest('hex');
 } else {
  throw Error("during generateEncryptedHash() SHOPIFY_API_SECRET was not a string")
 }
};



完整的终端错误输出如下:

$ firebase deploy --only functions

=== Deploying to 'projectName'...

i  deploying functions
Running command: npm --prefix "$RESOURCE_DIR" run lint

> functions@ lint /home/owner/PhpstormProjects/shopify/projectName/functions
> tslint --project tsconfig.json


ERROR: /home/owner/PhpstormProjects/shopify/projectName/functions/src/index.ts:157:15 - Expression has type `void`. Put it on its own line as a statement.

npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! functions@ lint: `tslint --project tsconfig.json`
npm ERR! Exit status 2
npm ERR! 
npm ERR! Failed at the functions@ lint script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/owner/.npm/_logs/2019-12-01T16_46_05_460Z-debug.log

Error: functions predeploy error: Command terminated with non-zero exit code2

typescript tslint
1个回答
0
投票

您不会从generateEncryptedHash返回任何内容,因此不会返回void类型。要比较字符串,您必须从该函数返回一些内容。像这样:

const generateEncryptedHash = (params: unknown): string => {
 if (typeof SHOPIFY_API_SECRET === "string") {
  return crypto.createHmac("sha256", SHOPIFY_API_SECRET).update(params as DataView).digest('hex');
 } else {
  throw new Error("during generateEncryptedHash() SHOPIFY_API_SECRET was not a string")
 }
};

我不确定DataView是什么,但是只能使用字符串/缓冲区更新digest。因此,如果输入是一个对象,则必须使用JSON.stringify,而这正是您想要从中获取哈希值的原因,例如.update(JSON.stringify(params))

© www.soinside.com 2019 - 2024. All rights reserved.