TypeScript Cookbook
1. 使用含有通配符的模块声明文件 d.ts
项目 docs/examples/erp-configs 文件夹下存在多个自动生成同一个结构的 erp_x.js 配置文件。当在 TypeScript 项目中直接引入 js 文件使用会提示缺少类型声明文件。
import config from 'docs/examples/erp-configs/erp_1';
// error 找不到模块“docs/examples/erp-configs/erp_1”或其相应的类型声明。
解决方案:为 erp-configs 文件夹下所有 js 文件新建类型声明文件 d.ts。
项目结构。
项目 |-- docs |-- examples |-- erp-configs |-- erp_1.js |-- erp_2.js |-- ...配置文件。
// erp_1.js 文件的伪代码 export default { ERP_BizObj: { ID: 10010, Name: '对象1'}, ERP_BizMTButton: { ID: 10086, Name: '按钮1'}, }首先使用
vite的resolve.alias文件系统路径别名功能统一配置的入口。// vite.config.ts import { resolve } from 'node:path' import { defineConfig } from 'vite' export default defineConfig({ resolve: { alias: { 'examples-configs': resolve(__dirname, './docs/examples/erp- configs') } } })然后在新建
erp-configs.d.ts类型声明文件,declare module 描述的模块名可以使用通配符。下面示例中,模块名
examples-configs/*表示适配所有以examples-configs/开头的模块名(比如examples-configs/erp_1)。// docs/erp-configs.d.ts declare module 'examples-configs/*' { interface ERPBizObjConfig { ERP_BizObj: Record<string, any>; ERP_BizMTButton: Array<Record<string, any>>; } const config: ERPBizObjConfig; export default config; }配置
tsconfig.json文件。{ "compilerOptions": { "include" : ["docs/**/*.d.ts"] } }通过
examples-configs模块名引入配置文件就可以匹配到类型声明了。import config from 'examples-configs/erp_1'
有关详细信息,请参阅:
