Probé type Sexp<T> = Array<T|Sexp<T>> pero tiene un problema de referencia circular.

0
pii_ke 23 nov. 2019 a las 21:08

1 respuesta

La mejor respuesta

Esto funciona bien, desde la versión 3.7 donde cambió las reglas de resolución para los alias de tipo recursivo. Para una versión anterior, puede usar el truco de la interfaz:

// Works since 3.7
type Sexp<T> = Array<T | Sexp<T>>;

// Works in older versions
type SexpOlder<T> = SexpArray<T>;
interface SexpArray<T> extends Array<T | SexpArray<T>> {}

const foo: Sexp<number> = [32, [45]];

o ver en TypeScript Playground

0
Dmitriy 23 nov. 2019 a las 20:28