我已經使用jasmine/index.d.ts
在手稿中編寫了一些測試。Jasmine`toThrowError`手稿定義(d.ts)似乎缺少第三個簽名
有幾個測試使用toThrowError
來聲明特定的自定義錯誤類已被拋出。
所有的測試都通過了,但TS編譯器拋出以下錯誤:
error TS2345: Argument of type 'typeof MyCustomError' is not assignable to parameter of type 'Error'.
我檢查了茉莉文檔和除非我的誤解,第一個參數可以是一個錯誤級別。
expect(foo).toThrowError(TypeError);
但jasmine index.d.ts
只列出了toThrowError
2個簽名:
toThrowError(message?: string | RegExp): boolean;
toThrowError(expected?: Error, message?: string | RegExp): boolean;
我的TS的理解還是有點不穩,但我不知道是否有也應該是第三個簽名,允許第一個參數是擴展Error的類,而不是實例?喜歡的東西:
toThrowError(expected?: typeof Error, message?: string | RegExp): boolean;
我說 '像',因爲我已經嘗試添加該到.d.ts
,但隨後出現以下錯誤:
error TS2345: Argument of type 'typeof MyCustomError' is not assignable to parameter of type 'ErrorConstructor'.
定製錯誤分類
class MyCustomError extends Error {
constructor() {
super('A custom error message.');
}
}
測試邏輯
it('should throw an error',() => {
var obj = new MyObject();
expect(() => obj.doSomething()
.toThrowError(MyCustomError);
});
當前解決方案來防止TS錯誤
如果我使誤差的情況下,該TS的錯誤停止。
it('should throw an error',() => {
var obj = new MyObject();
expect(() => obj.doSomething()
.toThrowError(new MyCustomError());
});
UPDATE
it('should throw an error',() => {
var obj = new MyObject();
expect(() => obj.doSomething()
.toThrowError(TypeError);
});
所以我發現,如果我改變錯誤類型的測試TypeError
我的IDE(Webstorm)和TS編譯器都抱怨(和我的測試正確失敗):
Argument type TypeErrorConstructor is not assignable to parameter type Error
但是,如果我然後重新添加以前的第三簽名jasmine/index.d.ts
然後IDE和TS編譯器都很高興。
toThrowError(expected?: typeof Error, message?: string | RegExp): boolean;
這表明d.ts
缺少類被錯誤聲明的簽名和我的自定義錯誤?
謝謝,它看起來像這個問題已經在最新的jasmine.d.ts - 'toThrowError(預計?:new(... args:any [])=>錯誤,消息?:string | RegExp ):布爾;' – james