尝试提交 generateKey X25519 的 TypeScript 修复代码

我开发的 PWA 在线应用 ateditors 和加密文件 eud 应用用到了 Web Crypto。但当进行发布版本构建的时候因为以下错误而不能生成 dist 目录:

Property 'publicKey' does not exist on type 'CryptoKey | CryptoKeyPair'.
  Property 'publicKey' does not exist on type 'CryptoKey'.

然后用以下代码手动修改了 VSCode 扩展与 npm :

// /Applications/VSCodium.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.dom.iterable.d.ts:384
// /Applications/VSCodium.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.dom.d.ts:31691
// node_modules/typescript/lib/lib.dom.iterable.d.ts:384
    generateKey(algorithm: "X25519" | { name: "X25519" }, extractable: boolean, keyUsages: ReadonlyArray<"deriveBits" | "deriveKey">): Promise<CryptoKeyPair>;

当执行 vite build 时工作一切正常了,没有错误。

我确认了 MDN 的文档,主流浏览器是这两年才完全支持 X25519 算法的(2024: Firefox/2025: Chrome)。

然后我决定在 github 上提交 issue 给TypeScript 项目。期望这个问题能被开发者尽快注意到,我就不用在本地手动修改扩展与 npm 包的代码了。

最终结果是非常令人满意的,开发者几乎是秒回说已经添加上去了。

我查看了本地的 TypeScript 版本,是 5.9.3 ,从发布列表来看,是两个月前发布的,这个问题应该能在最近的发布版本中被完美解决。

继续开心学心 TypeScript 中,之前手动修改的一段代码被证实存在使用失当,应该在使用参数前先明确定义EcKeyGenParams类型即可。

const algorithmParams: EcKeyGenParams = {
  name: "ECDSA",
  namedCurve: "P-256", // Correct, as EcKeyGenParams includes namedCurve
};
RTCPeerConnection.generateCertificate(algorithmParams);

28

Top articles