打字稿中的嵌套布尔值?

时间:2016-04-15 19:05:05

标签: javascript typescript

我正在尝试将在https://github.com/kaimallea/isMobile找到的javascript从JS转换为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)
    };

我使用

将“apple”声明为我班级的布尔值
 class IsMobileService {
     public apple: boolean;

问题是,我得到“无法转换类型'{phone:boolean; ipod:boolean; tablet:boolean; device:boolean}'来输入'boolean'”作为错误。

我也尝试过声明

public apple.phone: boolean;

在声明部分,但我被告知我在代码中有一个重复的标识符'apple'。

理想情况下,用户应该能够调用IsMobileService.apple或IsMobileService.apple.phone来获取所需的信息。

1 个答案:

答案 0 :(得分: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类的实例,访问它的公共苹果对象,然后获取要检查的属性。