bai*_*idz 5 javascript typescript zod
我有一个使用 Zod 的 Vite 库。我想解析配置,我的文件夹结构与配置对象结构类似。index.ts文件始终导出其自己目录中的所有文件以及其子目录中的所有内容,例如,export * from \'./subDir\';根文件导出“整个库”。
以下设置显示了单个配置分支
\n\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 api\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dataSources\n| | | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dataSource\n| | | | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 following\n| | | | | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 computed\n| | | | | | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 followingComputedDataSourceConfigurationSchema.ts ( extends dataSourceConfigurationSchema )\n| \xe2\x94\x82 \xe2\x94\x82 | | | \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.ts\n| | | | | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 entity\n| | | | | | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 followingEntityDataSourceConfigurationSchema.ts ( extends leadingDataSourceConfigurationSchema )\n| \xe2\x94\x82 \xe2\x94\x82 | | | \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.ts\n| \xe2\x94\x82 \xe2\x94\x82 | | \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.ts\n| | | | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 leading\n| | | | | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 leadingDataSourceConfigurationSchema.ts ( extends dataSourceConfigurationSchema )\n| \xe2\x94\x82 \xe2\x94\x82 | | \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.ts\n| | | | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dataSourceConfigurationSchema.ts ( base schema )\n\xe2\x94\x82 \xe2\x94\x82 | | \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.ts\n| | | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dataSourcesConfigurationSchema.ts ( expects leading and array of followings )\n\xe2\x94\x82 \xe2\x94\x82 | \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.ts\n| | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 apiConfigurationSchema.ts ( expects dataSources )\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.ts\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.ts \n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 basic.test.ts\nRun Code Online (Sandbox Code Playgroud)\n问题是我认为我遇到了循环依赖导入。我使用 Vitest 通过测试检查了架构
\nit(\'fails.\', () => {\n expect(() => apiConfigurationSchema.parse({})).not.toThrow();\n});\nRun Code Online (Sandbox Code Playgroud)\n通过这样做我得到以下错误
\n\n\n类型错误:无法读取未定义的属性(读取\'_parse\')
\n
我不想将模式合并到一个大文件中,因为子目录可能还包含此特定部分的自定义验证函数。
\n您对如何修复此设置有任何想法吗?
\n您有循环依赖(在 2 中index.ts)
// index.ts
export { apiConfigurationSchema } from './apiConfigurationSchema';
export * from './dataSources';
Run Code Online (Sandbox Code Playgroud)
// apiConfigurationSchema.ts
import { dataSourcesConfigurationSchema } from '.';
export const used = __use(dataSourcesConfigurationSchema )
Run Code Online (Sandbox Code Playgroud)
在重新导出之前导入并使用重新导出的*位置
所以,你需要解决的只是......
// index.ts
export * from './dataSources';
export { apiConfigurationSchema } from './apiConfigurationSchema';
Run Code Online (Sandbox Code Playgroud)
...只是交换两个文件中的两行
https://stackblitz.com/edit/vitest-dev-vitest-8uh3ya?file=src/api/index.ts
研究详细信息:我创建了一个文件
// a.ts
import { apiConfigurationSchema } from './src/api/apiConfigurationSchema';
apiConfigurationSchema.parse({});
Run Code Online (Sandbox Code Playgroud)
,安装tsx包,运行tsx watch a,并查找错误所在,直到修复
| 归档时间: |
|
| 查看次数: |
2190 次 |
| 最近记录: |