首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导出的变量X具有或正在使用外部模块Z中的名称Y,但不能命名

导出的变量X具有或正在使用外部模块Z中的名称Y,但不能命名
EN

Stack Overflow用户
提问于 2020-06-23 15:27:20
回答 3查看 4.5K关注 0票数 7

在本例中,我在tsconfig.json中使用TS3.9和tsconfig.json一起获得了以下错误:

代码语言:javascript
运行
复制
// a.ts
export const key = 1234
export const obj = {
    [key]: 1
};
export default obj;

// b.ts
import A from "./a";
import { key} from "./a"

// Exported variable 'theExport' has or is using name 'key' from external module "c:/tsexample/src/a" but cannot be named.ts(4023)
const theExport  = {
  A: A,
  B: 2,
  C: 3,
};
export default theExport
代码语言:javascript
运行
复制
// Exported variable 'theExport' has or is using name 'key' from external module "c:/tsexample/src/a" but cannot be named.ts(4023)

对相关问题的评论中,TS的PM提出了两个解决方案:

  1. 显式导入类型
  2. 显式声明导出的类型(发生错误的地方)

(1)在此情况下不起作用。我试着导出从'a‘到'b’中的所有内容,并且错误消息没有区别。

唯一起作用的是这种非常冗长和难以维护的显式类型注释:

代码语言:javascript
运行
复制
// updated b.ts
import A from "./a";

const theExport: {
    // https://github.com/microsoft/TypeScript/issues/9944
  [index: string]: typeof A | number;
} = {
  A: A,
  B: 2,
  C: 3,
};
export default theExport;

我的问题是:

  • 有什么解决办法不需要重复对象的形状呢?
  • 为什么导入类型不能解决问题?

这一问题与以下问题相似,但不同:

EN

回答 3

Stack Overflow用户

发布于 2020-10-28 05:29:01

它并不那么漂亮,但这是一个似乎在沙箱中起作用的最小侵入性的改变:

代码语言:javascript
运行
复制
const theExport = {
  A: A as {[K in keyof typeof A]: typeof A[K]},
  B: 2,
  C: 3
};
票数 4
EN

Stack Overflow用户

发布于 2020-10-28 04:30:49

基于这句话,看起来可能有一种解决方案:

代码语言:javascript
运行
复制
// a.ts
export const key = 1234
export const obj = {
    [key]: 1
};
export default obj;

// b.ts
import A from "./a";

interface ITheExport {
  A: typeof A;
  B: number;
  C: number;
}

const theExport: ITheExport = { // strong typing the object instead of using inference
  A: A,
  B: 2,
  C: 3,
};
export default theExport

请参阅沙盒

票数 1
EN

Stack Overflow用户

发布于 2020-11-02 11:13:39

显式设置obj类型

代码语言:javascript
运行
复制
// a.ts
export const key = 1234
export const obj = {
  [key as number]: 1
}
export default obj

// b.ts
import A from './a'

const theExport = {
  A: A,
  B: 2,
  C: 3
}
export default theExport
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62538330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档