【发布时间】:2021-11-25 07:08:46
【问题描述】:
我正在使用 TS + Vue 做一个项目,我开始从 API 返回的数组中选择值。有必要在循环内比较 2 个字符串值,我使用 === 并且即使使用相同的值也总是得到 false。我试图对字符串进行显式强制转换,但也没有给出任何结果。
const signers: string[] = (transaction.detailedExecutionInfo as MultiSigExecutionDetails).signers;
console.dir(signers);
console.dir(confirmations[0].signer);
console.log('<--->');
signers.forEach((signer: string) => {
const signerConfirm = confirmations.filter((confirm: MultiSigConfirmations) => {
const address1: string = signer as string;
const address2: string = confirm.signer as string;
console.dir(address1);
console.dir(address2);
console.dir(address1 === address2);
return signer === confirm.signer;
});
console.dir(signerConfirm.length);
});
我什至直接通过比较两个具有相同值的字符串进行检查,仍然得到 False
console.log(signers[0] === confirmations[0].signer);
如何正确比较TS中的字符串原语?
我附上console的截图。
提前谢谢大家的回答)
更新:
检查的地址对象:
console.dir(isRef(address1)); // false
address1 不是 ref 对象。
决赛:
据我了解,字符串可以只是 literal 或 object{value: "literal"}。因此,我建议将它们 100% 带到字面上,例如这样:
interface Istr {
value: string;
}
function convertStringObject(obj: string): string {
return typeof obj === 'object' ? (obj as Istr).value : obj;
}
convertStringObject 正确处理strings 和object-strings,返回literal string
【问题讨论】:
标签: arrays string typescript vue.js