小编Zby*_*byl的帖子

如何在 TypeScript 中重用递归联合类型的公共部分?

TLDR

这有效(游乐场):

type SimpleExpression = number | string | AddOperator<SimpleExpression> | PrintOperator<SimpleExpression>;
type ExtendedExpression = number | string | AddOperator<ExtendedExpression> | PrintOperator<ExtendedExpression> | PowerOperator<ExtendedExpression>;
Run Code Online (Sandbox Code Playgroud)

但是提取公共子类型不起作用(Playground):

type CommonExpression<E> = number | string | AddOperator<E> | PrintOperator<E>;
type SimpleExpression = CommonExpression<SimpleExpression>;
type ExtendedExpression = CommonExpression<ExtendedExpression> | PowerOperator<ExtendedExpression>;
Run Code Online (Sandbox Code Playgroud)

有什么办法可以解决吗?

详细描述

最近 TypeScript (3.7) 得到了对递归类型的扩展支持,但仍然不是一切皆有可能。
StackOverflow 上有很多解释递归类型的问题,但有一种有用的模式我找不到解决方案。

起点是一个表达式树,其中每个运算符都有作为表达式的子项。这有效:

type Expression = number | string | AddOperator | PrintOperator;
interface AddOperator {
  'first': Expression;
  'second': Expression;
}
interface PrintOperator {
  'value': …
Run Code Online (Sandbox Code Playgroud)

typescript typescript-generics

7
推荐指数
1
解决办法
193
查看次数

标签 统计

typescript ×1

typescript-generics ×1