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>[]'