允许重复类型声明的Typescript编译器

允许重复类型声明的Typescript编译器,typescript,Typescript,我有两种X类型。一种在文件中声明,另一种导入。 当我使用这个类型X来声明变量时,编译器采用导入的类型 文件1.ts export type X = number 文件2.ts import { X } from "./file2" export type X = string export const x: X = "foo" //this causes a compilation error export const x: X = 42 //this works just fine 我注

我有两种X类型。一种在文件中声明,另一种导入。 当我使用这个类型X来声明变量时,编译器采用导入的类型

文件1.ts

export type X = number
文件2.ts

import { X } from "./file2"

export type X = string
export const x: X = "foo" //this causes a compilation error
export const x: X = 42 //this works just fine
我注意到只有在导出本地类型时才会发生这种情况。如果未导出,您将在导入时看到冲突错误


这是预期的行为还是tsc中的错误?

我建议避免使用简单的别名来隐藏导入/导出名称,以便

从“/file1”导入{X}

变成

从“/file1”导入{X作为IWillNotShadowModulesAgain}

这样,您就可以在同一个文件中使用这两个声明,如

从“/file2”导入{X作为IWillNotShadowModulesAgain}
导出类型X=字符串;
常数a:IWillNotShadowModulesAgain=12;
常数b:X='IPromise';

谢谢Luca,这就是我使用的解决方案。这里的问题不是如何解决这个问题,而是为什么编译器首先允许我这么做。不同的模块有相同的名称并不少见,尤其是在依赖项中。例如,您在默认http库和Express中定义了一个
响应
类。Typescript不会阻止您同时使用这两种脚本,但根据文件的上下文,您很难理解要使用哪一种,因此程序员有责任正确处理它们。请注意,这只允许在模块中使用,您已经注意到,如果不导出第二个声明,您将收到一个错误。