Typescript 将 ArrayLike 泛型类型解构为基本类型,例如给定 A find I in:A = ArrayLike<I>

Posted

技术标签:

【中文标题】Typescript 将 ArrayLike 泛型类型解构为基本类型,例如给定 A find I in:A = ArrayLike<I>【英文标题】:Typescript destructure ArrayLike generic type to base type e.g given A find I in: A = ArrayLike<I> 【发布时间】:2021-03-29 14:34:54 【问题描述】:

我想实现以下,这是非法的。

class Test<ArrayLike<I>> 
  arr: ArrayLike<I>;
  current: I

以下将是解决此问题的另一种方法,但我不知道有什么像ArrayMember 这样的行为。任何帮助将不胜感激。

class Test<I> 
  arr: I;
  current: ArrayMember<I>

【问题讨论】:

【参考方案1】:

你可以试试infer

type ElementType<T extends ArrayLike<unknown>> = T extends ArrayLike<infer U>? U : never;

class Test<I extends ArrayLike<unknown>> 
  arr!: I;
  current!: ElementType<I>;

例子:

let foo = new Test<string[]>(); 
foo.arr; // type string[]
foo.current; // type string

【讨论】:

谢谢,我得到了以下结果,我认为这可以解决问题type ArrayMember&lt;T&gt; = T extends ArrayLike&lt;infer U&gt; ? U : never;

以上是关于Typescript 将 ArrayLike 泛型类型解构为基本类型,例如给定 A find I in:A = ArrayLike<I>的主要内容,如果未能解决你的问题,请参考以下文章

如何将一种泛型类型的结构复制到 TypeScript 中的另一种泛型?

TypeScript - 如何将索引签名表示为泛型类型

如何将 Angular $http 与 typescript 泛型一起使用

TypeScript-泛型

是否可以在 TypeScript 中传播独特的泛型类型?

如何使用带有 Typescript 的泛型将中继(graphql)连接映射到边缘节点