2016-09-14 118 views
10

既然typescript 2.0 RC(甚至是beta?)可以使用數字文字類型,如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

注:枚舉定義一組名爲** numeric **常量,而不是新類型。因此,聲明可以傳遞數字而不是'paletteColor's是不必要的。 –

+1

@Burt_Harris true。還需要一種將枚舉限制爲0-255的方法。人們也可以使用索引器對象而不是枚舉,雖然有點難看。無論哪種方式都不需要'|',如果它被限制在0-255或0-255之間,它應該在最好的情況下簡單地稱爲「paletteColor」。 – 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 –

相關問題