gpt4 book ai didi

unit-testing - 在 typescript 中使用类型作为值

转载 作者:搜寻专家 更新时间:2023-10-30 20:40:01 24 4
gpt4 key购买 nike

我正在使用 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 referenced a type, but is being used as a value here 错误。

我已经尝试转换为 any(同样的错误),模块和导出的技巧,但没有成功。我应该能够使用 Typescript 编写任何 Javascript,这在 Javascript 中可以正常工作——我在这里缺少什么?

最佳答案

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

Typescript 接口(interface)不会被编译到 js 输出中,您不能在运行时使用它们。

关于unit-testing - 在 typescript 中使用类型作为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41833150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com