Hur definierar man en trädtyp i TypeScript?
Jag skrev en trädliknande typ som nedan:
type ReactNode = ReactChild | Array<ReactNode>
men redaktören sa till mig det
TS2456: typaliaset 'ReactNode' refererar cirkulärt till sig självt.
Hur löser/fixar man detta fel?
Svar #1
Det finns ett problem med rekursioner i typalias, som kort förklaras i detta ärende:
typaliaser är inte som gränssnitt. Gränssnitt är namngivna typer, medan typaliaser bara är alias. Internt behandlas de också olika, kompilatorn plattar aggressivt ut typalias till deras deklarationer.
Det finns en längre diskussion här: tillåt rekursiva generiska typalias.
I ditt fall kan du göra något som:
interface ReactNodeArray extends Array<ReactNode> {}
type ReactNode = ReactChild | ReactNodeArray;
