typescript中的嵌套布尔值

Nested booleans in typescript?

本文关键字:布尔值 嵌套 typescript      更新时间:2023-09-26

我正在尝试转换在https://github.com/kaimallea/isMobile从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:bboolean}’转换为类型‘boolean’"作为错误。

我还试着申报

public apple.phone: boolean;

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

理想情况下,用户应该能够调用IsMobileService.apple或IsMobileServices.apple.phone来获得他们需要的信息。

apple不是布尔值。其为CCD_ 2。

最简单的事情就是把它当作一个对象来使用,比如:

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对象,然后获取要检查的属性。