我正在使用Ionic2和Typescript开发应用程序。
我有以下代码:
public showTick(message: Message): boolean {
console.log('showTick: '+message+' '+message.readByReceiver+' '+this.senderId+' '+message.senderId);
if (message && message.readByReceiver === true && this.senderId && this.senderId === message.senderId) {
console.log('showTick(' + message.content + '): return true');
return true;
}
return false;
}
输出以下内容:
showTick: [object Object] true P8 P8
我原本期望它进入if
语句并打印:
showTick(xxx): return true
我使用===
时出现了问题吗?
任何建议都表示赞赏。
P.S。这是Message
模型:
interface Message {
_id?: string;
chatId?: string;
senderId?: string;
ownership?: string;
content?: string;
createdAt?: Date;
changeDate?: boolean;
readByReceiver?: boolean;
}
更新
我将代码更改为:
public showTick(message: Message): boolean {
console.log('showTick: ', message, message.readByReceiver, this.senderId, message.senderId);
if (message) {
console.log('showTick1 ');
if (message.readByReceiver === true || message.readByReceiver === 'true') {
console.log('showTick2 ');
if (this.senderId) {
console.log('showTick3 ');
if (this.senderId === message.senderId) {
console.log('showTick(' + message.content + '): return true');
return true;
}
}
}
}
return false;
}
并获得以下ts错误(message.readByReceiver === 'true'
):
ERROR in ./app/pages/messages/messages.ts (275,46): error TS2365: Operator '===' cannot be applied to types 'boolean' and 'string'.
更新
问题似乎是boolean
类型的对象持有string
,因此以下内容对其进行了修复。
if (message.readByReceiver === true || message.readByReceiver+'' === 'true')
两个问题:
boolean
持有string
。这是个
对象来自定义为boolean
的Meteor数据库。答案 0 :(得分:0)
我认为您需要从一些调试技术开始,以提供或收集更多信息。一个具体的,将是@andrecanilho和@deceze在问题评论中提出的建议。
您需要将if语句分解为多个输出,以确定逻辑分解的位置:
console.log(message.readByReceiver === true)
console.log(this.senderId === message.senderId)
在诊断出这两个陈述的输出后,我们(andre,deceze和I)猜测其中一个是假的......引导您找到一个可以自己解决的解决方案,或者可能提供更多反馈到Stack Overflow社区。 p>
<强>更新强>
你无法在Typescript中将类型boolean(true)与字符串类型('true')进行比较。
更改此行:
if (message.readByReceiver === true || message.readByReceiver === 'true')
为:
if (message.readByReceiver === true)
此功能可帮助您诊断逻辑分解的位置:
public showTick(message: Message): boolean {
console.log(message.readByReceiver === true);
console.log(this.senderId === message.senderId)
if (message && message.readByReceiver === true && this.senderId && this.senderId === message.senderId) {
console.log('showTick(' + message.content + '): return true');
return true;
}
return false;
}