與上層命名空間成員名稱重複問題:TypeScript 與 C#

同事遇到的 TypeScript 小問題一則,如下圖,Foo 與 Bar.Foo Module 裡都有個 IBlah Interface(不算良好的設計但合法,用在特定情境可簡化程式),在 Bar.Foo 內想引用更上層 Foo 的 IBlah,不管宣告型別是 IBlah 還是 Foo.IBlah,指向的都是 Bar.Foo.IBlah。

同樣的情境,在 C# 裡也會上演,在 Bar.Foo 命名空間內不管寫 Foo.IBlah 或 IBlah 指的都是Bar.Foo.IBlah:

C# 可用 global:: 關鍵字指定全域命名空間解決這個問題,寫成 global::Foo.IBlah 指明是上層 Foo 命名空間下的 IBlah。〔MSDN 文件舉了一個在自己程式中命名 System、Console 的牙給範例(揪竟是為了什麼要這樣苦苦相逼呢?),使用 global:: 也可輕巧解決〕。

跳一下,回到 TypeScript 案例。在 TypeScript 沒有 global:: 可用(Github 上有人提議,但尚未納入規格),我找到的解法是利用 import ExtFoo = Foo 為外層模組取別名,在 Bar.Foo 透過 ExtFoo.IBlah 解決問題。

module Foo {
    export interface IBlah {
        External: string;
    }
}
import ExtFoo = Foo;
module Bar {
    module Foo {
        export interface IBlah {
            Internal: string;
        }
    }
 
    var x: ExtFoo.IBlah = { External: "A" };
}
歡迎推文分享:
Published 17 November 2016 05:19 PM 由 Jeffrey
Filed under: ,
Views: 3,164



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<November 2016>
SunMonTueWedThuFriSat
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication