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>

我想实现如下,这是非法的

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

以下是解决此问题的另一种方法,但我不知道任何类似 ArrayMember 的方法。任何帮助将不胜感激。

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

你可以试试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