javascript - 如何测试 JavaScript 对象文字是否具有与 TypeScript 类相同的属性?

标签 javascript typescript

目标

我想编写一个单元测试来在运行时验证 JavaScript 对象是否符合 TypeScript 类型。我正在寻找一种方法来执行此操作,它允许我描述一次类型,然后在随后进行 TypeScript 编译时检查和 JavaScript 运行时检查。该解决方案必须允许嵌套类结构。

代码

因为一个代码示例值 1000 个字……请参阅“???”问题的根源:

目标单元测试

it('object literal and TypeScript class should be compatible, () => {
  
  ??? psudo-code on line below ???  
  const isCompatible = (myLiteral ~has matching properties with~ MyClass)

  expect(isCompatible).toBeTrue();

});

JavaScript 对象文字

var myLiteral = {
  entities: {
    users: {
      '1': { id: 1 },
      '2': { id: 2 }
    }
  }
}

在 TypeScript 中定义的类

class MyClass {
    entities: Entities;
}

class Entities {
    users: { [key: string]: User };
}

class User {
    id: number;
}

背景

我正在使用 normalizer规范化一个对象。 normalize 方法的输出不是强类型的 - 因此需要使用 as 关键字将输出恢复为强类型。这可能会在不知不觉中将 future 的错误引入代码库。

我想编写单元测试来验证 normalizr 的输出是否符合我在 TypeScript 中使用的已经定义的类型

当前想法

TypeScript 接口(interface)和类型在运行时不存在......但是,类存在,并且类型可以从类派生。我希望有一种方法可以利用这一事实来实现我的目标。或者也许还有另一种代码生成方式。但是,到目前为止,我一直找不到。或者也许我处理上述问题的整个过程在某种程度上是错误的,或者我遗漏了一些明显的东西。欢迎对此提出任何反馈。

最佳答案

项目Typescript Json Schema从 TS 类生成 JSON 模式。这些可以在运行时用于验证 JS 对象文字。

我已经使用该库来验证对我的 API 的输入并生成合理的响应(例如,输入 MyClass 对象上缺少属性 entities)。

关于javascript - 如何测试 JavaScript 对象文字是否具有与 TypeScript 类相同的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56063022/

相关文章:

javascript - 究竟什么会导致 "HIERARCHY_REQUEST_ERR: DOM Exception 3"-Error?

javascript - 图像 slider 和页面加载时图像的堆叠外观

reactjs - 在 Typescript 中,什么是 type PoorMansUnknown = {} |空 |未定义,你会如何处理它?

node.js - Nodejs : Failed to load gRPC binary module because it was not installed for the current system

javascript - Jquery:使用唯一键名称迭代嵌套 JSON

javascript - 在不知道属性名称的情况下访问 JavaScript 的对象属性

javascript - 如何使用正则表达式在单词和空格之间查找?

angular - 检查字符串是否仅包含数字和点 (.)

angular - karma 单元测试 : ERROR in Cannot read property 'length' of undefined

javascript - 在 Javascript 中显示数组中的图像