Javascript 在baseDir导入时导出对象时类型丢失

Javascript 在baseDir导入时导出对象时类型丢失,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我有一个名为constants.ts的文件,其中包含与React-TypeScript应用程序相关的常量 该文件如下所示: //错误严重时的错误。 const BAD\u ERROR\u ERROR=“发生了不应该发生的事情。请联系管理员”; 常数={ 答复:{ 账户:{ 登录:{ 未验证的帐户:{ 信息:“您需要验证您的电子邮件”, problemFields:[“电子邮件”] }, 错误登录:{ 信息:“您的电子邮件或密码不正确”, 问题字段:[“电子邮件”、“密码”] }, 默认值:{ 消

我有一个名为
constants.ts
的文件,其中包含与React-TypeScript应用程序相关的常量

该文件如下所示:

//错误严重时的错误。
const BAD\u ERROR\u ERROR=“发生了不应该发生的事情。请联系管理员”;
常数={
答复:{
账户:{
登录:{
未验证的帐户:{
信息:“您需要验证您的电子邮件”,
problemFields:[“电子邮件”]
},
错误登录:{
信息:“您的电子邮件或密码不正确”,
问题字段:[“电子邮件”、“密码”]
},
默认值:{
消息:错误\u错误\u错误,
problemFields:[“电子邮件”、“密码”]
}
}
}
}
};
导出默认常量;
然后我将其导入TSX文件,如下所示:

从“常量”导入常量;
并引用如下键:

const{status}=json;
const resp=Constants.APIResponses.accounts.login[status.message];
但是,当我尝试使用它时,我会出现以下错误:

属性“APIResponses”不存在于类型“typeof import”(“constants”)上。TS2339
69 | 
70 | const{status}=json;
>71 | const resp=Constants.APIResponses.accounts.login[status.message];
此错误仅在从my baseDir以
“常量”
的形式导入时发生。/../constants可以正常工作。(这就是我现在要做的工作)

以下是我尝试过但没有成功的方法:

  • 在Constants.ts中显式定义常量的类型
  • 将其重命名为constants.js
  • 在默认导出上强制转换类型
  • 不将其导出为默认值
以下是我发现有效的黑客补丁,但它们都是黑客和不受欢迎的:

  • 相对导入(
    。/../constants
    (当前)
  • 将其强制转换为任意类型(
    (常量为任意)。APIResponses…
这是我的tsconfig.json:

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react",
    "rootDir": "./src",
    "baseUrl": "./src"
  },
  "include": [
    "src"
  ]
}

它与相对导入一起工作的事实告诉我,问题可能出在您的
tsconfig.json
配置中。您可以将您的TypeScript配置添加到问题中吗?@AndrewHill Good point-done.将您的include更改为
“include”:[“src/****”]
,将您的baseUrl更改为
“baseUrl”:“src”
。删除
rootDir
,因为它只用于控制带有
outDir
标志的输出目录。另外值得检查(但不太可能)的是它是否与
“strict”:false一起工作。如果确实如此,则意味着其中一个严格标志正在干扰您的导入。有关使用strict时打开的strict标志的列表,请参阅@AndrewHill尝试了所有操作(包括
strict:false
),但我仍然在原地。