node.js - 跨多个文件具有相同名称的非导出变量导致 TS2403
问题描述
我是一个 TypeScript 新手,正在尝试编写 Node.js (Node.ts?) 后端,并尝试了解设置服务器的基础知识。我正在使用 ts-node 版本 8.6.2 和 typescript 版本 3.7.5,并以下列方式(ajv
风格)为某些域对象定义验证:
// domain_obj_1.ts:
const commonSchema = {
type: 'object',
properties: {
foo: { type: 'string' },
},
};
export class DomainObject1 {
...
// domain_obj_2.ts:
const commonSchema = {
type: 'object',
properties: {
bar: { type: 'string' },
},
};
export class DomainObject2 {
...
但是,ts-node-dev
吐出以下错误:
error TS2403: Subsequent variable declarations must have the same type.
Variable 'commonSchema' must be of type '{ type: string; properties: { foo: { type: string; }; }; }',
but here has type '{ type: string; properties: { bar: { type: string; }; }; }'.
我只能假设 Typescript 正在检测这些单独的声明的冲突commonSchema
,但它们没有被导出,所以我不确定这是怎么发生的。
关于 TS 及其在 Node 中的使用,我还有很多不明白的地方,但这是令人惊讶的行为,我想知道我是否遗漏了一些明显的东西。
解决方案
想出了一种方法来ts-node-dev
停止对我大喊大叫,这表明我的设置至少有几处问题。希望这个答案可以为其他挣扎于自己的构建的人提供足够的面包屑:
我
require('ts-node/register')
在每个 knex 迁移文件的顶部都有,所以我可以用现代 ES 语法编写代码。事实证明,这可能会导致双重编译问题,这似乎具有一些不可预测的下游影响。结果还表明
ts-node
,需要通过设置环境变量或传递 --project (-P) 标志ts-node-dev
来明确告知文件所在的位置。tsconfig.json
TS_NODE_PROJECT
解决 #1 似乎足以解决我看到的错误,但为了正确起见,我还解决了丢失的配置文件,因此 prod 中的最终编译是可以预测的。
推荐阅读
- download - 无需下载即可创建 Pytorch 数据集
- elixir - Object 和 %Object{} 的区别
- flutter - 有没有办法在集成测试中重新启动应用程序,同时保留应用程序数据?
- reactjs - Reactjs 从子组件(使用 hookReducer)获取状态值到父组件
- python - fit() 方法中的 batch_size 和 LSTM 输入中的批处理有什么区别?Python
- oracle19c - 未在 OSB 12c Fusion MiddleWare 中使用 DB 适配器更新表
- wordpress - 如何限制 WordPress 中非管理员/用户对特定目录中文件的访问
- td-engine - TDengine 数据丢失问题
- android - 带有多个背景列表的屏幕
- asp.net-core - 如何在 Asp.Net 核心 API 中获取具有给定目录名称的字符串变量中的目录路径