2013-09-24 28 views
0

如果我嘗試定義具有相同的名稱作爲由打字稿自動導入一個類型的類,如從打字稿「前奏」隱藏的進口

class Map { 
} 

然後我收到以下錯誤

error TS2000: Duplicate identifier 'Map'. 

我想要做的是能夠重命名或避免完全導入TypeScript庫類Map,以便我可以用相同的名稱定義我自己的類。

將我的Map放入一個模塊(根據下面的答案之一)有所幫助,但我仍然無法通過非限定名稱(即通過導入)引用它,儘管這次沒有關於重複名稱的投訴;進口根本沒有做任何事情:

假設A.ts包含:

module A { 
    export class Map { 
    } 
} 

B.ts包含:

/// <reference path='A.ts'/> 

import Map = A.Map 

function test (m: Map) { 
} 

爲了使這個編譯我需要m: A.Map更換m: Map。否則,編譯器會抱怨我缺少一些泛型參數,因爲它假定我的意思是來自TypeScript「前奏」的Map類型。

我覺得我應該能夠定義一個「本地」名稱(通過顯式聲明,或通過導入),在前奏中隱藏任何等價命名的定義;或者,我應該能夠手動禁用從前奏中導入特定類型(就像我可以在Haskell中那樣)。

回答

2

把你的類模塊內..

module SomeNamespace { 
    class Map { 
    } 
} 

這會使你的類從默認的地圖類唯一的。

+0

最佳答案+1,我想提一提,對於'或者避免完全導入TypeScript庫類Map',有一個編譯器標誌,用於將'lib.d.ts'內的* everything * noLib'編譯器標誌,然後使用自定義'lib.d.ts'。但我會建議不要使用它,並且像你剛纔提到的那樣解決它,讓生活變得簡單:) – basarat

+0

謝謝。這很有效,但不幸的是,我不能以非限定的名字來引用我的Map。相應地更新我的問題。 但是,我想我會接受這個答案,如果沒有辦法解決這個問題。 (@ basarat的建議是有點激烈:) – Roly

+0

也許這樣? http://www.typescriptlang.org/Playground/#src=module%20SomeNamespace%20%7B%0A%09class%20Map%20%7B%0A%09%09Foo()%20%7B%0A%09%09 %09%0A%09%09%7D%0A%09%7D%0A%09%0A%09class%20SomethingElse%20%7B%0A%09%09constructor()%20%7B%0A%09%09%09var %20map%20%3D%20new%20Map()%3B%20%2F%2F%20Sorta%20unqulified%20reference ...%0A%09%09%09map.Foo()%3B%0A%09%09% 7D%0A%09%09%0A%09%7D%0A%7D –