Unit testing 在typescript中将类型用作值

Unit testing 在typescript中将类型用作值,unit-testing,typescript,Unit Testing,Typescript,我正在使用injectloader模拟正在进行单元测试的Typescript项目的依赖关系。我正在测试的服务具有如下导入行: import pnp, { SearchQuery, Sort, SortDirection, CamlQuery } from "sp-pnp-js"; 在我的测试中,我想模拟pnp上的几个函数,但保持类的完整性。在我的单元测试文件中,我包含了以下导入: import { SearchQuery, Sort, SortDirection, CamlQuery } fr

我正在使用
injectloader
模拟正在进行单元测试的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”只引用一个类型,但在这里被用作一个值
错误

我尝试过使用模块和导出来施展
任何
(相同的错误),但没有成功。我应该能够用Typescript编写任何Javascript,而这在Javascript中工作起来很简单-我这里缺少什么?

根据
的说法,SearchQuery是一个接口,这意味着您不能将其视为一个值(正如错误消息所说)


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

从技术上讲,因为它只是为了类型安全,我可以这样做
t:MyInterface={}

根据
搜索查询是一个接口,这意味着您不能将其视为一个值(如错误消息所示)。Typescript接口没有被编译到js输出中,您不能在运行时使用它们。我甚至没有想过检查它是否是一个接口——只是假设它是一个类型。让我找到其中一个我需要的类型,然后重试……而真正的类型(如搜索)工作得很好。@NitzanTomer-将其作为答案发布,以便我可以将其标记为接受:)这看起来像是在编译时应用的工作接口,所以我不需要在模拟中伪造它们,并且在模拟中提供真正的类时我没有错误。