Import 从TypeScript“隐藏导入”;前奏曲;

Import 从TypeScript“隐藏导入”;前奏曲;,import,module,typescript,Import,Module,Typescript,如果我试图定义一个与TypeScript自动导入的类型同名的类,例如 class Map { } 然后我得到以下错误 error TS2000: Duplicate identifier 'Map'. 我想做的是能够重命名或避免完全导入TypeScript库类Map,这样我就可以用相同的名称定义自己的类 将我的Map放在一个模块中(根据下面的一个答案)会有所帮助,但我仍然不能通过非限定名称(即通过导入)来引用它,尽管这次没有关于重复名称的投诉;导入根本不起任何作用: 假设A.ts包含: mo

如果我试图定义一个与TypeScript自动导入的类型同名的类,例如

class Map {
}
然后我得到以下错误

error TS2000: Duplicate identifier 'Map'.
我想做的是能够重命名或避免完全导入TypeScript库类
Map
,这样我就可以用相同的名称定义自己的类

将我的
Map
放在一个模块中(根据下面的一个答案)会有所帮助,但我仍然不能通过非限定名称(即通过导入)来引用它,尽管这次没有关于重复名称的投诉;导入根本不起任何作用:

假设
A.ts
包含:

module A {
   export class Map {
   }
}
/// <reference path='A.ts'/>

import Map = A.Map

function test (m: Map) {
}
B.ts
包含:

module A {
   export class Map {
   }
}
/// <reference path='A.ts'/>

import Map = A.Map

function test (m: Map) {
}
//
导入映射=A.Map
功能测试(m:Map){
}
为了进行编译,我需要将
m:Map
替换为
m:A.Map
。否则编译器会抱怨我缺少一些泛型参数,因为它假定我指的是TypeScript“prelude”中的
Map
类型


我觉得我应该能够定义一个“本地”名称(通过一个显式声明,或通过一个导入),它隐藏了前奏中任何等价命名的定义;或者,我应该能够手动禁用从prelude导入特定类型(正如我在Haskell中所做的那样)。

将类放入模块中

module SomeNamespace {
    class Map {
    }
}

这将使您的类与默认映射类不同

很好的答案+1,我想提到的是,对于
或避免完全导入,TypeScript库类映射
有一个编译器标志,用
--noLib
编译器标志排除
lib.d.ts
中的所有内容,然后使用自定义的
lib.d.ts
。但是我建议你不要使用它,并且像你提到的那样解决它,让生活变得简单:)谢谢。这是可行的,但不幸的是,我不能用非限定名称引用我的
映射。相应地更新了我的问题。然而,如果没有办法,我想我会接受这个答案。(@basarat的建议有点过激:)也许是这样?