我正在尝试为流行的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} is not assignable to variable type Partial<NodeRetryOptions>
。
只能通过转换对象as Partial<NodeRetryOptions>
或手动将接口上的每个字段更改为可选项来解决。为什么编译器会抱怨这个?
编辑: 使用TypeScript 2.4.0。