Esta Options
classe possui uma função de fábrica que retorna uma instância personalizada da classe. É isso:
export class Options {
quadrant?: 1 | 2 | 3 | 4 = 1;
static factory(options: Partial<Options>): Options {
const defaults: Options = new Options();
return {
...defaults,
...options,
};
}
}
E estou tentando passar um argumento de função de fábrica que modifica quadrant
assim:
export const defaults = {
quadrant: 2,
};
const responsive: Options = Options.factory({
...defaults,
});
E produz este erro:
Argument of type '{ quadrant: number; }' is not assignable to parameter of type 'Partial<Options>'.
Types of property 'quadrant' are incompatible.
Type 'number' is not assignable to type '1 | 2 | 3 | 4'.(2345)
Existe uma maneira de consertar isso?
Você pode usar uma
const
asserção ao inicializardefaults
para que o verificador de tipo infira um tipo mais específico para ela: em particular, o tipo daquadrant
propriedade será inferido como o tipo literal2
em vez donumber
tipo mais amplo:O que é suficiente para que sua
Options.factory()
chamada funcione conforme o esperado:Link do Playground para o código
Se você passar o mouse sobre
defaults
, verá que o tipo inferido énumber
- você verá algo assim:Existem 2 maneiras de lidar com esse problema. Você pode converter os defaults
as const
, o que significa que o tipo será o seguinte:A outra maneira de conseguir o que deseja é digitar o
defaults
objeto para que não seja inferido: