用于Chai

时间:2016-11-18 01:45:53

标签: javascript chai flowtype

使用流0.35.0,可用于flow-typedchai libdef(可用here)似乎不支持断言接口。

所以我决定自己为自己的项目申报,因为我只使用了6个断言函数。

以下是我所做的并且工作正常:

 declare class ChaiAssert {
     isFalse       (o: any)        : boolean;    
     instanceOf    (x: any, t: any): boolean;
     isNumber      (x: any)        : boolean;
     isString      (x: any)        : boolean;
     isTrue        (x: any)        : boolean;
     isNull        (x: any)        : boolean;
     throws        (f:   F)        : boolean;
 }

...在我的代码中,声明使用如下:

const assert: ChaiAssert = require('chai').assert; 

就像我说的那样,这是有效但不令人满意的,因为它迫使我为assert对象定义一个任意名称,也没有将chai声明为模块。

试图模仿所讨论的一些方法here我尝试了下面的工作:

declare class AssertClass {
     static isFalse       (o: any)        : void;    
     static instanceOf    (x: any, t: any): void;
     static isNumber      (x: any)        : void;
     static isString      (x: any)        : void;
     static isTrue        (x: any)        : void;
     static isNull        (x: any)        : void;
     static throws        (f:   F)        : void;
}

 declare export var assert: typeof AssertClass

...在我的代码中,import语句使用了更惯用的语法(以前的方法无法实现),如下所示:

import {assert} from 'chai';

但是我不知道这是否是声明assert导出的chai对象的正确方法(除了它似乎正在工作的事实)。

例如,我在libdef中声明了一个带有一些静态方法的虚构类AssertClass。但是,我不知道这是assert导出chai导出的对象的方式 - 它是否是任何类的实例,更不用说该类有静态方法了。我试着查看代码但无法解析它。

所以我的问题是:

  1. 上述方法是正确/可接受的吗?
  2. 如果是这样,我是否必须在导入时进一步注释assert对象。以下似乎是不必要的和语法错误:

    import {assert: AssertClass} from 'chai';
    

0 个答案:

没有答案