网站搜索

typescript - 为什么会产生错误:"初始化器类型不能赋值给变量类型 Partial<...>"


我正在尝试为流行的 retry npm 包声明 TS 类型。这个包使用一个对象来指定它的选项,其中所有字段都是可选的。鉴于此,我认为这是使用 Partial<T> 的一个用例(当然这可以有争议)。

export type milliseconds = number;

// Details at: https://www.npmjs.com/package/retry
export declare interface NodeRetryOptions {
    forever: boolean;
    unref: boolean;
    retries: number;
    factor: number;
    minTimeout: milliseconds;
    maxTimeout: milliseconds;
    randomize: number | false;
}

export let MY_EXPONENTIAL_BACKOFF_OPTIONS: Partial<NodeRetryOptions> =
{ forever: true, factor: 2, minTimeout: 7*1000, maxTimeout: 180*1000, randomize: 1.5 };

这会产生编译时错误:Initializer type {forever: boolean, factor: number, minTimeout: number, maxTimeout: number, randomize: number} 无法分配给变量类型 Partial<NodeRetryOptions>。

这只能通过将对象 as Partial<NodeRetryOptions> 类型转换来解决,或者手动将接口上的每个字段都改为可选。为什么编译器会对此报错?

编辑: 使用 TypeScript 2.4.0。