मैं निम्नलिखित हासिल करना चाहता हूं, जो अवैध है।

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

इसके आसपास एक और तरीका निम्नलिखित होगा, लेकिन मुझे ऐसा कुछ भी नहीं पता जो ArrayMember जैसा काम करता हो। किसी भी सहायता की सराहना की जाएगी।

class Test<I> {
  arr: I;
  current: ArrayMember<I>
}
0
Morgan Gethin Barrett 19 पद 2020, 03:18

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
1
ABOS 19 पद 2020, 03:31
धन्यवाद, मैं निम्नलिखित के साथ समाप्त हुआ, जो मुझे लगता है कि चाल है type ArrayMember<T> = T extends ArrayLike<infer U> ? U : never;
 – 
Morgan Gethin Barrett
19 पद 2020, 03:59