2016-09-14 3 views
10

С помощью машинописного текста 2.0 RC (или даже бета?) Можно использовать числовые литералы, как в 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

Примечание: перечисления определяют набор именованных ** числовых ** констант, а не новый тип. Поэтому, объявляя, что числа могут быть переданы вместо 'paletteColor', не нужно. –

+1

@Burt_Harris true. Также понадобится способ ограничить перечисление до 0-255. Можно также использовать объект индексатора вместо перечисления, хотя и немного уродливый. '' 'Не требуется в любом случае, он должен в лучшем случае просто быть' paletteColor', если он был ограничен 0-255 или всего 0-255. – ASDFGerte

+1

Примечание: Начиная с TS 2.4, теперь строковые литералы разрешены как значения перечисления 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 –

+1

", не выписывая 256 номеров типа" –

Смежные вопросы