Aqui está um trecho do código-fonte do Vue 3.
export type StrictUnwrapSlotsType<
S extends SlotsType,
T = NonNullable<S[typeof SlotSymbol]>,
> = [keyof S] extends [never] ? Slots : Readonly<T> & T
interface User {
name: string,
age: number
}
type intersectionUser = Readonly<User> & User
// result in:
// type intersectionUser = {
// name: string;
// age: number;
//}
Parece Readonly<T> & T
e T
é igual.
Por que isso retorna Readonly<T> & T
em vez de retornar diretamente T
?
Foi adicionado com a seguinte solicitação pull: https://github.com/vuejs/core/pull/8374
A razão é que com Readonly não é possível chamar funções, o que causou problemas nesse caso específico.