我尝试了type Sexp<T> = Array<T|Sexp<T>>
,但是它有一个循环引用问题。
答案 0 :(得分:0)
这很好用,因为从3.7版开始,他们changed the resolution rules使用递归类型别名。对于较旧的版本,您可以使用界面技巧:
// 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]];