Neste exemplo:
type Action<T extends string, P = never> = {
type: T;
} & ([P] extends [never]
? {}
: {
payload: P;
});
Por que precisamos de colchetes em torno do condicional [P] extends [never]
e qual é a diferença se não o usarmos assim P extends never
?
Entendo o que esse tipo está fazendo, mas não consigo encontrar uma explicação sobre por que realmente precisamos de colchetes e por que não funciona sem eles.
EDIT: Deixe-me tentar com um exemplo mais simples:
type GetTest<T = never> = [T] extends [never] ? string : number;
type Test = GetTest; // type Test = string;
Aqui está type Test = string
o esperado. Mas o que não entendi é o que acontece com a condição quando não temos colchetes, não obtemos, string
mas também não obtemos um number
, em vez disso, obtemostype Test = never
type GetTest<T = never> = T extends never ? string : number;
type Test = GetTest; // type Test = never