如何使用sinon存根导出类型?

时间:2018-05-22 12:02:05

标签: angular typescript

如何为

创建存根实例
import { Observable } from 'rxjs/Observable';

export type Translation = { [key: string]: string }
export type LoaderTranslations = { [key: string]: Translation }

BaseLoader 抽象类:

import { LoaderTranslations } from './dictionary';

export abstract class BaseLoader {
    public abstract loadTranslations(items: string[]): Promise<LoaderTranslations>;
}

我的测试:

import { BaseLoader } from './interface/base-loader';
import { LoadedTranslations } from './interface/dictionary';

describe(`test`, () => {

    let loaderMock: any,
        translations;

    beforeEach(() => {
        loaderMock = sinon.createStubInstance(BaseLoader);

        translations = sinon.createStubInstance(LoadedTranslations);

        // Then I want create spy for promise by using this translations stub
    });
});

我无法为我的LoaderTranslations字典创建存根。我收到以下错误:

  

&#39; LoaderTranslation&#39;仅指类型,但用作值   这里。

P.S。很抱歉有一个愚蠢的问题,但我最近从C#迁移到TypeScript,我很难理解发生了什么。

1 个答案:

答案 0 :(得分:1)

TypeScript编译器执行类型擦除,这意味着类型在编译阶段消失。这意味着您不能在运行时代码中使用类型或接口作为参数或值。

要存根某些,你必须有一个运行时可见的 thing 到存根;像一个班级。

简单地说,您可以创建一个符合LoadedTranslations类型的对象,并直接使用它(因为它是一个存根,而不是一个由Sinon生成的存根) - 或者传入它来创建一个存根。 / p>