如何让类型定义文件适配不同文件夹下的同名JS文件?
解决方案
以下是几种无需复制d.ts文件即可解决类型匹配问题的方法:
方法1:在类型定义文件中声明多路径模块
在wasm/antlr4-runtime-wasm.d.ts中,保留原有类型定义的同时,添加针对debug和release子目录的模块声明,让TypeScript将不同路径的JS文件关联到同一套类型:
// 原有类型定义(保持不变) export interface ANTLR4Wasm { // 你的类型字段/方法定义 } export class Vector<T> { // 你的类定义 } export default function Module(): Promise<any>; // 按实际返回类型调整 // 匹配wasm目录下任意子目录中的antlr4-runtime-wasm.js文件 declare module "./*/antlr4-runtime-wasm.js" { export { ANTLR4Wasm, Vector }; export default Module; }
通配符声明会自动关联debug/和release/下的目标JS文件,无需修改原有导入路径。
方法2:通过tsconfig.json路径映射关联类型
在tsconfig.json中配置paths,将两个子目录的JS文件导入路径直接映射到父目录的d.ts文件,注意配合baseUrl确保路径解析正确:
{ "compilerOptions": { "baseUrl": ".", // 以项目根目录为基准路径 "paths": { // 匹配src目录下导入wasm子目录中JS文件的路径 "../wasm/*/antlr4-runtime-wasm.js": ["./wasm/antlr4-runtime-wasm.d.ts"] }, // 确保TypeScript能扫描到wasm目录下的类型文件 "include": ["src/**/*", "wasm/**/*"] } }
配置完成后,TypeScript会将../wasm/release/antlr4-runtime-wasm.js和../wasm/debug/antlr4-runtime-wasm.js的导入请求,都指向父目录的类型定义文件。
方法3:创建轻量类型重定向文件(可选)
在debug/和release/目录下各创建一个空的类型重定向文件,内容仅为导入并重新导出父目录的类型:
// wasm/debug/antlr4-runtime-wasm.d.ts export * from "../antlr4-runtime-wasm.d.ts"; export { default } from "../antlr4-runtime-wasm.d.ts"; // wasm/release/antlr4-runtime-wasm.d.ts export * from "../antlr4-runtime-wasm.d.ts"; export { default } from "../antlr4-runtime-wasm.d.ts";
这种方式无需修改原有类型定义或tsconfig,通过轻量的重定向关联类型,避免复制完整的类型代码。
内容的提问来源于stack exchange,提问作者Mike Lischke
相关产品推荐
相关产品推荐

