我正在尝试将在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来获取所需的信息。
答案 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类的实例,访问它的公共苹果对象,然后获取要检查的属性。