2016-04-15 70 views
0

我試圖將從JS發現在https://github.com/kaimallea/isMobile的JavaScript轉換爲TypeScript。打字稿中的嵌套布爾值?

我做的不錯,到目前爲止,但能對付的代碼塊:

this.apple = { 
     phone: match(apple_phone, ua), 
     ipod: match(apple_ipod, ua), 
     tablet: !match(apple_phone, ua) && match(apple_tablet, ua), 
     device: match(apple_phone, ua) || match(apple_ipod, ua) || match(apple_tablet, ua) 
    }; 

我使用

class IsMobileService { 
    public apple: boolean; 

的問題是宣稱「蘋果」在我班布爾,我得到「Can not convert type」{phone:boolean; ipod:boolean; tablet:boolean; device:boolean}'來輸入'boolean'「作爲錯誤。

我也試過聲明

public apple.phone: boolean; 
聲明部分

,但我告訴我的代碼重複的識別碼「蘋果」。

理想情況下,用戶應該能夠調用IsMobileService.apple或IsMobileService.apple.phone來獲取他們需要的信息。

回答

0

apple不是布爾值。它的一個Object

最簡單的辦法是隻把它作爲一個對象,如:

public apple:Object = { 
    phone: match(apple_phone, ua), 
    ipod: match(apple_ipod, ua), 
    tablet: !match(apple_phone, ua) && match(apple_tablet, ua), 
    device: match(apple_phone, ua) || match(apple_ipod, ua) || match(apple_tablet, ua) 
}; 

但是,如果你想更嚴格(要求apple是具體的布爾值組成的對象),那麼你可以使用一個interface,如:

export interface Apple { 
    phone:boolean; 
    ipod:boolean; 
    ... 
} 

並設置apple鍵入Apple代替object,如:

public apple:Apple = { 
    phone: match(apple_phone, ua), 
    ipod: match(apple_ipod, ua), 
    tablet: !match(apple_phone, ua) && match(apple_tablet, ua), 
    device: match(apple_phone, ua) || match(apple_ipod, ua) || match(apple_tablet, ua) 
}; 

當試圖檢查屬性時,然後使用IsMobileService類的實例,訪問它的公共Apple對象,並獲取要檢查的屬性。

+0

唯一的問題是,用戶不能只是打電話給蘋果,看是否有四個布爾值是真的。 – SpaceCowboy74

+0

沒關係。我意識到原始劇本的開發者也沒有這樣做。他用apple.device來測試。 – SpaceCowboy74

+0

要做到這一點,您只需在界面或isMobileService類中添加一個方法來檢查並調用該方法。 – oooyaya