JavaScript有对象包装器,可以让我检查原始类型的"属性"是否存在,那么我该如何让TypeScript也能像这样工作呢?
P粉797855790
P粉797855790 2023-07-28 18:48:38
[JavaScript讨论组]

XMLValidator.validate的返回值要么是true,要么是ValidationError(这并不完全准确,请查看我的更新),而ValidationError具有err属性。

validate(  xmlData: string,  options?: validationOptionsOptional): true | ValidationError

因为JavaScript使用对象包装器来表示布尔原始值,所以我可以通过检查err属性是否存在来判断验证是否成功。

const result = XMLValidator.validate(message)
if (result.err) { // How do I make it work in ts?
   console.log(`invalid XML)
} else {
  console.log(`XML)
}

但是TypeScript不允许我这样做,它会报错:"true"类型上不存在属性'err'。

我不喜欢首先检查返回类型的想法,因为我觉得它很啰嗦,而且实际上没有返回值类型的定义(请查看我的更新)。我应该如何编写尽可能简洁的TypeScript代码?

--- 更新 ---

我进一步检查了validator.js的代码。


const isValid = validateAttributeString(attrStr, options);
if (isValid !== true) {
   return getErrorObject(...);
}
...

function getErrorObject(code, message, lineNumber) {
  return {
    err: {
      code: code,
      msg: message,
      line: lineNumber.line || lineNumber,
      col: lineNumber.col,
    },
  };
}

所以看起来我只能在这里使用 if (typeof result == "boolean"),但我希望有一个"通用"的解决方案来回答我的问题。

P粉797855790
P粉797855790

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号