मुझे जेनेरिक के प्रकार की जांच करने की आवश्यकता है।

उपनाम प्रकार में, मैं यह कर सकता हूं:

type Obj<J, T> = J extends number ? {
    [x: number]: T
}: J extends string ? {
    [x: string]: T
}: never;

लेकिन कक्षा में, मैं नहीं कर सकता:

class List<T = any> {
   private IsNumbered = T extends number;
}

आपके समय के लिए शुक्रिया।

0
user13268210 27 सितंबर 2020, 21:44

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा इसलिए है क्योंकि आप प्रकार और रनटाइम मानों को मिलाने का प्रयास करते हैं। TS में कोई प्रतिबिंब API नहीं है, इसलिए रनटाइम मानों की गणना करने के लिए प्रकारों का उपयोग करना संभव नहीं है। इस विचार को उजागर करने के लिए आपके उदाहरण को निम्नानुसार पुन: सक्रिय किया जा सकता है:

class Foo<T = any> {
   T value;
   get IsNumbered() {
       return typeof this.value === 'number';
   }
}
0
Alexander Alexandrov 27 सितंबर 2020, 22:27