将类型用作打字稿中的值

乔纳森·鲁普

我正在inject-loader模拟正在进行单元测试的Typescript项目的依赖关系。我正在测试的服务具有这样的导入行:

import pnp, { SearchQuery, Sort, SortDirection, CamlQuery } from "sp-pnp-js";

对于我的测试,我想在pnp上模拟几个函数,但保持类不变。在我的单元测试文件中,我包含了以下导入:

import { SearchQuery, Sort, SortDirection, CamlQuery } from "sp-pnp-js";

这使我可以测试必要的类。我已经声明了一个模拟服务对象:

// mock services
const mockPnp = {
    default: { ... }
};

我要连接到目标类实例的对象:

Service = require("inject!./sharepointservice")({
    "sp-pnp-js": mockPnp
}).Service;

只要我不运行任何引用这些类的代码(即SearchQuery,一切都可以正常工作为了使它起作用,我尝试将其添加到模拟中:

// mock services
const mockPnp = {
    default: { ... },
    SearchQuery: SearchQuery
};

但是,我得到一个'SearchQuery' only refers to a type, but is being used as a value here错误。

我试过强制转换为any(相同的错误),使用模块和导出的技巧,但是没有运气。我应该能够用Typescript编写任何Javascript,而这在Javascript中却可以正常工作-我在这里缺少什么?

尼桑·托默尔

根据定义文件 SearchQuery是一个接口,这意味着您不能将其视为值(如错误消息所述)。

Typescript接口没有被编译到js输出中,并且您不能在运行时使用它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章