javascript - JavaScript 中的结构类型检查

标签 javascript ecmascript-6

我想知道是否有一种通用的方法(也许是一个库)来检查对象的结构(例如鸭子类型)。

这对于运行时类型检查和编写单元测试都很有用。

我想我正在寻找类似于 typescript “接口(interface)”的东西,但是 typescript 只进行静态检查。

最佳答案

没有简单的方法,但是实用函数怎么样?:

function isOfType(obj, model) {
  for (let prop in model) {
    if (!(prop in obj) || typeof obj[prop] !== typeof model[prop] || Array.isArray(model[prop]) !== Array.isArray(obj[prop])) {
      return false;
    }
    if (typeof model[prop] === 'object' && !Array.isArray(model[prop])) {
      if (!isOfType(obj[prop], model[prop])) {
        return false;
      }
    }
  }
  return true;
}

基本上,您可以将任何对象与模型进行比较。它将确保该对象具有模型具有的相同类型的所有属性,并将其递归地应用于嵌套对象。

关于javascript - JavaScript 中的结构类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57118453/

相关文章:

javascript - 如何从对象数组中查找值

javascript - RXJS 6 处理 http Observables 的方式是什么?

ecmascript-6 - 有没有办法在 aws lambda 函数中运行 es6 组件,特别是 promises 和 generators

javascript - 用户输入的 Reddit 搜索 API 查询

javascript - 在 github 上设置演示页面

javascript - jquery 数据表包含空白表头

javascript - asp.net 未在复选框中显示选中和未选中状态

javascript - 什么时候应该在 ES6 箭头函数中使用 return 语句

javascript - 如何使用 Gulp 在 Node 中要求 jQuery?

Javascript 箭头函数代替 for...of