如何在TypeScript中为某些递归(如s表达式)定义通用类型别名?

时间:2019-11-23 18:08:29

标签: typescript

我尝试了type Sexp<T> = Array<T|Sexp<T>>,但是它有一个循环引用问题。

1 个答案:

答案 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]];

or see in TypeScript Playground