2016-09-14 1 views
10

Seit typescript 2.0 RC (oder sogar beta?) Ist es möglich, Zahlenliterale Typen zu verwenden, wie in type t = 1 | 2;. Ist es möglich, einen Typ auf einen Nummernbereich zu beschränken, z. 0-255, ohne 256 Zahlen im Typ zu schreiben?Ist es möglich, die Anzahl auf einen bestimmten Bereich zu beschränken?

In meinem Fall übernimmt eine Bibliothek Farbwerte für eine Palette von 0-255, und ich würde es vorziehen, nur ein paar zu nennen, aber beschränken sie 0-255:

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

Hinweis: enums definieren eine Menge von benannten ** numerischen ** Konstanten, kein neuer Typ. Daher ist es überflüssig zu deklarieren, dass Zahlen anstelle von 'paletteColor' übergeben werden können. –

+1

@Burt_Harris wahr. Eine Möglichkeit, eine Aufzählung auf 0-255 zu beschränken, wäre ebenfalls erforderlich. Man könnte auch ein Indexer-Objekt anstelle eines Enums verwenden, obwohl es etwas hässlich ist. Das '' 'wird nicht benötigt, es sollte im besten Fall einfach' paletteColor' sein, wenn es auf 0-255 oder nur 0-255 beschränkt ist. – ASDFGerte

+1

Hinweis: Ab TS 2.4 sind String-Literale jetzt als Enum-Werte zulässig https://blogs.msdn.microsoft.com/typescript/2017/06/27/announcing-typescript-2-4/#string-enums –

Antwort

5

Nein, es ist nicht möglich . Diese Art der genauen Typeinschränkung ist in Typoskript (noch?) Nicht verfügbar

Nur Laufzeitprüfungen/können Behauptungen erreichen, dass :(

15

Wenn Sie kleine Auswahl haben, können Sie immer so etwas wie schreiben:

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

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

Natürlich funktioniert es nur für ganze Zahlen und ist hässlich wie Hölle :)

+0

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

Verwandte Themen