2016-09-14 5 views
10

से संख्या प्रतिबंधित करना संभव है क्योंकि टाइपस्क्रिप्ट 2.0 आरसी (या यहां तक ​​कि बीटा?) type t = 1 | 2; में संख्यात्मक प्रकारों का उपयोग करना संभव है। क्या किसी प्रकार को किसी श्रेणी तक सीमित करना संभव है, उदा। 0-255, प्रकार में 256 नंबर लिखने के बिना?क्या किसी निश्चित श्रेणी

मेरे मामले में, एक पुस्तकालय 0-255 से एक पैलेट के लिए रंग मान स्वीकार करता है, और मैं केवल कुछ नाम हैं पसंद करते हैं लेकिन 0-255 के लिए सीमित हैं:

const enum paletteColor { 
    someColor = 25, 
    someOtherColor = 133 
} 
declare function libraryFunc(color: paletteColor | 0-255); //would need to use 0|1|2|... 
+1

नोट: enums नामित ** संख्यात्मक ** स्थिरांक का एक सेट परिभाषित करता है, न कि एक नया प्रकार। यह घोषणा करने के लिए कि 'पैलेट रंग' की बजाय संख्या पारित की जा सकती है अनावश्यक है। –

+1

@ बर्ट_ हैरिस सच। एक enum को 0-255 तक सीमित करने का एक तरीका भी आवश्यक होगा। कोई भी एक enum के बजाय एक सूचकांक वस्तु का उपयोग कर सकते हैं, हालांकि थोड़ा बदसूरत। '|' की किसी भी तरह की आवश्यकता नहीं है, यह सर्वोत्तम परिदृश्य में होना चाहिए, यदि यह 0-255 तक सीमित है, या केवल 0-255 तक सीमित है तो इसे 'palettecolor' होना चाहिए। – ASDFGerte

+1

नोट: टीएस 2.4 के रूप में, स्ट्रिंग अक्षरों को अब enum मानों के रूप में अनुमति दी जाती है https://blogs.msdn.microsoft.com/typescript/2017/06/27/announcing-typescript-2-4/#string-enums –

उत्तर

5

नहीं यह संभव नहीं है । सटीक प्रकार बाधा इस तरह का (अभी तक?) टाइपप्रति में उपलब्ध नहीं है

केवल क्रम चेक/दावे प्राप्त कर सकते हैं कि :(

15

यदि आप छोटे श्रृंखला है, तो आप हमेशा की तरह कुछ लिख सकते हैं:

type MyRange = 5|6|7|8|9|10 

let myVar:MyRange = 4; // oops, error :) 

बेशक यह केवल पूर्णांक के लिए काम करता है और नरक के रूप में बदसूरत है :)

+0

https : //stackoverflow.com/questions/39494689/is-it-possible-to-restrict-number-to-a-certain-range#comment79287008_39494689 –

संबंधित मुद्दे