Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
520 views
in Technique[技术] by (71.8m points)

typescript - TSLint:表达式的类型为“ void”。 单独声明(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

  ask by Sean Dezoysa translate from so

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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))哈希值的原因,例如.update(JSON.stringify(params)))

UPD: you should set a type for the argument params

(UPD:您应该为参数params设置类型)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...