gpt4 book ai didi

javascript - 类型 'subtle' 上不存在属性 'typeof webcrypto'

转载 作者:行者123 更新时间:2023-12-05 00:31:46 26 4
gpt4 key购买 nike

我正在使用 Node v17.4 并想使用 webcrypto API。基于 this example我正在尝试导入 subtle进入我的项目,但 TypeScript 出现错误

Property 'subtle' does not exist on type 'typeof webcrypto'.


唯一的命名空间 webcrypto报价是 this .
import crypto from 'crypto';
const { subtle } = crypto.webcrypto; // subtle doesn't exist
如何访问 subtle ?

最佳答案

如您所述,@types/node仅包含 webcrypto 的 stub 界面。一种解决方法是扩展 crypto要声明的模块声明 webcrypto.subtleSubtleCrypto从 DOM 类型定义:

// src/types/index.d.ts

declare module "crypto" {
namespace webcrypto {
const subtle: SubtleCrypto;
}
}
这允许编写如下模块:
// src/digest.ts:

import * as crypto from "crypto";

// subtle has type SubtleCrypto, from the DOM type definitions
const { subtle } = crypto.webcrypto;

// Generate a cryptographic digest of the given message
export async function digest(message?: string, algorithm = "SHA-512") {
const encoder = new TextEncoder();
const data = encoder.encode(message);
const hash = await subtle.digest(algorithm, data);
return hash;
}
使用 SubtleCrypto ,项目必须通过添加 dom 来启用 D​​OM 类型定义到 lib tsconfig.json 中的数组.例如,安装了以下软件包:
$ npm install -D typescript@4.6 @types/node@17 @tsconfig/node17
tsconfig.json包含:
{
"extends": "@tsconfig/node17/tsconfig.json",
"compilerOptions": {
"lib": ["dom"],
"outDir": "dist",
"typeRoots": ["./node_modules/@types", "./src/types"]
},
"include": ["src/**/*"],
"exclude": ["dist", "node_modules"]
}
您可以编写一个调用 digest 的入口点并打印结果:
// src/index.ts

import { digest } from "./digest";

const message = "Hello, World!";

(async () => {
const digestBuffer = await digest(message);
console.log(Buffer.from(new Uint8Array(digestBuffer)).toString("hex"));
})();
这将构建并运行,例如:
$ npx tsc && node dist/index.js
374d794a95cdcfd8b35993185fef9ba368f160d8daf432d08ba9f1ed1e5abe6cc69291e0fa2fe0006a52570ef18c19def4e617c33ce52ef0a6e5fbe318cb0387

关于javascript - 类型 'subtle' 上不存在属性 'typeof webcrypto',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71525466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com