[英]TSLint: Expression has type `void`. Put it on its own line as a statement
When I run firebase deploy
the CLI app runs the TS compiler and TSLint throws the error shown on the commented line:当我运行
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");
I don't understand what change it wants, does anyone know how to handle this error?我不明白它想要什么改变,有谁知道如何处理这个错误? Here is the helper function being run on that line:
这是在该行上运行的辅助函数:
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")
}
};
The full terminal error output is below:完整的终端错误输出如下:
$ 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
You don't return anything from generateEncryptedHash
hence the void return type.您不会从
generateEncryptedHash
返回任何内容,因此返回类型为 void。 To compare the string you have to return something from that function.要比较字符串,您必须从该函数返回一些内容。 Like that:
像那样:
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")
}
};
I'm not sure what DataView
is but you can update digest
only with a string/ Buffer.我不确定
DataView
是什么,但您只能使用字符串/缓冲区更新digest
。 So you have to use JSON.stringify
if the input is an object and that's what you want a hash from, eg .update(JSON.stringify(params))
所以你必须使用
JSON.stringify
如果输入是一个对象并且这就是你想要的散列,例如.update(JSON.stringify(params))
UPD: you should set a type for the argument params
UPD:您应该为参数
params
设置类型
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.