Eu tenho a seguinte lógica:
interface ResultBase {
readonly success: boolean
}
type Result<Payload = undefined> = ResultBase & (Payload extends undefined ? {
readonly payload?: unknown
} : {
readonly payload: Payload
})
function getResult<Payload = undefined>(payload: Payload): Result<Payload> {
return {
// ^^^^^^
success: true,
payload,
}
}
Tente .
A instrução marcada return
é sublinhada com um erro do compilador:
Type '{ success: true; payload: Payload; }' is not assignable to type 'Result<Payload>'.
Type '{ success: true; payload: Payload; }' is not assignable to type 'Payload extends undefined ? { readonly payload?: unknown; } : { readonly payload: Payload; }'.
Eu me pergunto por que o tipo condicional na mensagem de erro não inclui a success
propriedade? Não deveria ser incluído por ResultBase & …
?