TypeScript严格空检查:如何覆盖库约束?

时间:2016-10-30 10:13:22

标签: typescript

我的代码使用async库,特别是此回调类型(source):

interface AsyncResultCallback<T> { (err: Error, result: T): void; }

在我的启用了strictNullChecks的TypeScript代码中,调用它会失败:

cb(null, someObject);
  

错误:(239,16)TS2345:类型&#39; null&#39;的参数不能分配给&#39;错误&#39;。

类型的参数

现在我不确定库类型定义是否错误,但让我们说它是,并且界面应该用err可选定义,如下所示:

interface AsyncResultCallback<T> { (err?: Error, result: T): void; }

我可以做些什么来说服TypeScript允许传递null作为回调的第一个参数?我已经尝试"skipLibCheck": true"skipDefaultLibCheck": true,但没有快乐。

1 个答案:

答案 0 :(得分:2)

skipLibCheckskipDefaultLibCheck标志在这种情况下无法提供帮助,因为错误来自您的代码,而不是来自您正在使用的库。

你有两个选择(我能想到):

(1)传递非空值:

cb(new Error(), someObject);

(2)尝试扩充库:

import * as Async from "async";

declare global {
    interface AsyncResultCallback<T> {
        (err: Error | null, result: T): void;
    }
}