Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 从只读元组类型中筛选出值_Typescript - Fatal编程技术网

Typescript 从只读元组类型中筛选出值

Typescript 从只读元组类型中筛选出值,typescript,Typescript,我在编写一个助手类型时遇到了一些问题,该类型将Parser的元组作为参数,并返回Ts的元组类型,除非T未定义 以下是我到目前为止的情况: class Parser<T> {} type ToSequenceValueType<P extends ReadonlyArray<Parser<any>>> = P extends [infer P, ...infer R] ? P extends Parser<infer V>

我在编写一个助手类型时遇到了一些问题,该类型将
Parser
的元组作为参数,并返回
T
s的元组类型,除非
T
未定义

以下是我到目前为止的情况:

class Parser<T> {}

type ToSequenceValueType<P extends ReadonlyArray<Parser<any>>> =
    P extends [infer P, ...infer R]
    ? P extends Parser<infer V>
      ? V extends undefined
        ? ToSequenceValueType<R>
        : [V, ...ToSequenceValueType<R>]
      : never
    : []

type A = readonly [Parser<number>, Parser<string>, Parser<undefined>, Parser<boolean>]

type R = ToSequenceValueType<A> // Should be [number, string, boolean]
类解析器{}

type to sequencevaluetype我相信您正在寻找此解决方案:

类解析器{}
/**
*我使用方括号来表示[Val],以避免分配性
*/
类型映射谓词=
T扩展解析器
? [Val]扩展[未定义]
? []
:[Val]
:从不;
类型映射<

Arr扩展了readonlyray,您可以这样做,但是您的代码有不相关的问题;并且正在将一个
只读数组
传递给某个需要
数组
的对象,因此您的输出不正确;即使你解决了这些问题,你显然是无意的。在我写一个答案之前,你能解决这些问题吗?所以我用
P extends readonly[推断P,…推断R]
替换了数组分解部分,并用
[V]extends[undefined]
解决了分配问题,即使是在一个空泛型类中,它似乎也能按预期工作。我不明白的是,分解ReadonlyArray并不会提供元素和ReadonlyArray rest…因为
any[]
扩展了
readonly any[]
,但反之亦然。我对问题是什么感到困惑;你能把它缩减到一个只有你问的问题的地方吗?我原以为这是不允许使用的递归类型,但现在它似乎是关于
只读的?
Type 'R' does not satisfy the constraint 'readonly Parser<any>[]'