web-dev-qa-db-ja.com

数を特定の範囲に制限することは可能ですか

TypeScript 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|...
31
ASDFGerte

いいえ、不可能です。この種の正確な型制約は、TypeScriptでは使用できません(まだ?)

実行時チェック/アサーションのみがそれを達成できます:(

14
AlexG

範囲が狭い場合は、次のようにいつでも記述できます。

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

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

もちろん、整数に対してのみ機能し、地獄のようにいです:)

31
Adam Szmyd

現時点では不可能ですが、 GitHubの未解決の問題 があります。現在、彼らはまだ提案を待っていますが、この機能はいつか来るかもしれません。

要するに、プロポーザルが出るまで、数値の範囲をタイプとして使用することはできません。

9
DrunkenPoney