You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为TypeScript 4.6重新定义已移除的DhImportKeyParams接口?

解决TypeScript 4.6中第三方库依赖已移除的DhImportKeyParams接口编译错误

问题描述

我在项目中使用一个基于TypeScript 3.7编写的第三方库,该版本TypeScript的lib包含DhImportKeyParams接口。但我的项目使用TypeScript 4.6,该接口已被移除,编译测试时出现**"Cannot find name 'DhImportKeyParams'"**错误,错误来自第三方库的.d.ts文件中的CryptoScheme接口定义:

export interface CryptoScheme {
    genAlg: Pbkdf2Params | AesKeyGenParams | HmacKeyGenParams;
    alg: string | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams | any;
    encrypt(key: CryptoKey, plaintext: string): PromiseLike<EncryptedObject>;
    decrypt(key: CryptoKey, obj: EncryptedObject): PromiseLike<string>;
}

我尝试创建typings.d.ts文件定义该接口:

declare interface DhImportKeyParams extends Algorithm {
    generator: Uint8Array;
    prime: Uint8Array;
}

并在tsconfig.json的typeRoots中添加该目录,测试用的tsconfig.spec.json继承主配置,但仍报错。请问如何重新定义该接口以让第三方库正常编译?

解决方案

1. 确保接口定义在全局作用域

DhImportKeyParams原本属于全局Web Crypto API类型,需保证自定义定义处于全局作用域:

  • 如果typings.d.ts没有模块级别的import/export语句,直接定义接口即可:
    // typings.d.ts
    interface DhImportKeyParams extends Algorithm {
        generator: Uint8Array;
        prime: Uint8Array;
    }
    
  • 如果文件必须作为模块(包含import/export),则通过declare global挂载到全局:
    // typings.d.ts
    declare global {
        interface DhImportKeyParams extends Algorithm {
            generator: Uint8Array;
            prime: Uint8Array;
        }
    }
    
    export {}; // 标记文件为模块,避免全局作用域污染
    

2. 修正tsconfig配置

自定义类型文件更适合通过include指定,而非仅依赖typeRoots(后者主要用于npm包类型目录):

// tsconfig.json
{
  "compilerOptions": {
    // 其他配置...
    "typeRoots": ["./node_modules/@types", "./typings"]
  },
  "include": [
    "src/**/*",
    "./typings/**/*.d.ts" // 明确包含自定义类型文件
  ]
}

如果测试配置tsconfig.spec.json继承主配置,需确认它未覆盖include:

// tsconfig.spec.json
{
  "extends": "./tsconfig.json",
  "include": [
    "src/**/*.spec.ts",
    "./typings/**/*.d.ts"
  ]
}

3. 针对第三方库命名空间扩展(可选)

如果第三方库将类型放在自身模块命名空间下,需在对应模块中扩展接口:

// typings.d.ts
declare module "第三方库包名" {
    interface DhImportKeyParams extends Algorithm {
        generator: Uint8Array;
        prime: Uint8Array;
    }
}

4. 重启TypeScript语言服务

编辑器的TS服务可能未自动刷新类型定义,手动重启服务(比如VSCode中按Ctrl+Shift+P选择"TypeScript: Restart TS Server"),确保新定义被加载。

内容的提问来源于stack exchange,提问作者Joseph Zabinski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:02:34