如何为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
相关产品推荐
相关产品推荐

