当前位置:  开发笔记 > 编程语言 > 正文

使用类型作为打字稿中的值

如何解决《使用类型作为打字稿中的值》经验,为你挑选了1个好方法。

我正在使用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中可以轻松工作 - 我在这里缺少什么?



1> Nitzan Tomer..:

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

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

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有