相关疑难解决方法(0)

TypeScript中的循环类型引用

我是打字稿的新手,我想了解如何在两种类型之间设置循环引用.引用不必是完整的代码引用,只需要接口,但接口定义在单独的文件中.例如,假设我有两个接口:Parent和Child.它们是双重关联的,因此父母有一个孩子的集合,每个孩子都有父母的参考(如下所示).如何设置导入或依赖项,以便可以在单独的文件中定义它们?

interface Parent {
  children: Child[]
}

interface Child {
  parent: Parent
}
Run Code Online (Sandbox Code Playgroud)

typescript

16
推荐指数
3
解决办法
7831
查看次数

Typescript 类型定义中的方括号是什么意思?

在这个问答中,我看到一个联合类型定义被包裹在方括号中(编辑:问题现在已经解决了)。到目前为止,我只见过没有方括号的联合类型。例如有什么区别:

type UnionA = number | string;
type UnionB = [number | string];
Run Code Online (Sandbox Code Playgroud)

我知道 TS 中方括号的含义如下:

typescript

6
推荐指数
1
解决办法
2551
查看次数

TypeScript中的递归类型

假设我们尝试创建HTML构建帮助器

build([
  'html', { lang: 'en' }, [
    ['head', [
      ['title', 'Hello, world!']
    ]
  ]
])
Run Code Online (Sandbox Code Playgroud)

the参数的类型声明build将是(实际上会更复杂,但让我们考虑最简单的情况)

type Node = [string, { [key: string]: string }, Node[]]
Run Code Online (Sandbox Code Playgroud)

不幸的是,id无效,因为TypeScript抱怨

TS2456: Type alias 'Node' circularly references itself.
Run Code Online (Sandbox Code Playgroud)

有什么解决方法吗?

typescript

5
推荐指数
4
解决办法
2663
查看次数

如何输入递归可变参数元组

我有一个查询元素数组,其中每个元素可以是一个术语或一个子查询,其中包含以“AND”或“OR”开头,后跟一组合法查询元素、术语或嵌套子查询等。

例如,这些都应该是合法的输入:

const query1 = "Hello"
const query2 = ["AND", "Hello", "World"]
const query3 = ["OR", ["AND", "Hello", "World"], ["AND", "Hola", "Mundo"]]
Run Code Online (Sandbox Code Playgroud)

TS 4.0中的Variadric Tuple应该允许您输入数组的第一个元素,并为其余元素输入另一种类型:

type IQuery = ["AND" | "OR", ...Array<string>]
const query = ["AND", "Hello", "World"]  // valid
Run Code Online (Sandbox Code Playgroud)

TS 3.7中的递归类型应该允许您定义使用自身的类型:

type IQueryOps = string | Array<IQueryOps>
const query: IQueryOps = ["Hello", "World", ["Hola", "Mundo"]]  // valid
Run Code Online (Sandbox Code Playgroud)

但当圆形类型展开时,我似乎无法将两者结合起来。在这种情况下,每个查询都以一个运算符开头,后面跟着一个字符串或另一个有效的查询,如下所示:

type IOperator = "AND" | "OR"
type IQuery = [IOperator, ...Array<string | IQuery>]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我收到错误:

类型别名“IQuery”循环引用自身。(2456) …

recursion typescript variadic-tuple-types

5
推荐指数
1
解决办法
733
查看次数