打字稿将 ArrayLike 泛型类型分解为基本类型,例如给定 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...