Por que a asserção TypeScript do objeto literal `{a}` funciona com a interface `{a, b}` mas não `{a ?, b}`

Por que a seguinte afirmação funciona:

interface AllRequired {
    a: string;
    b: string;
}

let all = {a: "foo"} as AllRequired; // No error

Mas essa afirmação dá um erro:

interface SomeOptional {
    a?: string;
    b: string;
}

let some = {a: "foo"} as SomeOptional; // Error: Property 'b' missing

A única diferença que vejo é tornar opcional uma das propriedades da interface (?) Parece que, se todas as propriedades não são opcionais, posso afirmar um objeto parcial para a interface, mas, assim que qualquer uma das propriedades da interface for opcional, não posso mais afirmar um objeto parcial. Isso realmente não faz sentido para mim e não consegui encontrar uma explicação para esse comportamento. Oque esta acontecendo aqui?

Por contexto: Iencontrou esse comportamento enquanto tenta contornar o problema que o ReactsetState() pega um objeto de estado parcial, masO TypeScript ainda não possui tipos parciais para fazer isso funcionar corretamente com sua interface de estado. Como solução alternativa, eu vim comsetState({a: "a"} as MyState) e descobri que isso funciona desde que a interfaceMyState campos sãotudo não opcional, mas falha assim quealguns propriedades são opcionais. (Tornar todas as propriedades opcionais é uma solução alternativa, mas muito indesejável no meu caso.)

questionAnswers(2)

yourAnswerToTheQuestion