数字并集类型的字符串化值的TypeScript类型



我正在尝试定义一个TypeScript类型,该类型将值限制为一组数字的字符串版本。解释如下:

假设我有一个联合数字类型,如下所示:

const ONE = 1;
const TWO = 2;
type ALLOWED_NUMBER = typeof ONE | typeof TWO;

我还想定义一个配套字符串类型,它只允许这些数字的字符串化版本。这样我就可以做以下事情:

type ALLOWED_NUMBER_STRING = /* insert solution here :) */
const numericStringA: ALLOWED_NUMBER_STRING = '1';    // no error
const numericStringB: ALLOWED_NUMBER_STRING = '3';    // error
const numericStringC: ALLOWED_NUMBER_STRING = 'foo';  // error

我可以手动定义这种类型,但最好避免冗余!

您正在寻找模板文字类型:

TS游乐场

const ONE = 1;
const TWO = 2;
type ALLOWED_NUMBER = typeof ONE | typeof TWO;
type ALLOWED_NUMBER_STRING = `${ALLOWED_NUMBER}`;
const numericStringA: ALLOWED_NUMBER_STRING = '1';
const numericStringB: ALLOWED_NUMBER_STRING = '3'; /*
^^^^^^^^^^^^^^
Type '"3"' is not assignable to type '"1" | "2"'.(2322) */
const numericStringC: ALLOWED_NUMBER_STRING = 'foo'; /*
^^^^^^^^^^^^^^
Type '"foo"' is not assignable to type '"1" | "2"'.(2322) */

对于一组数字,您可以通过以下方式将其设为DRYer:

TS游乐场

const allowedNumbers = [1, 2, 3] as const;
type AllowedNumber = typeof allowedNumbers[number]; // 1 | 2 | 3
type AllowedNumberStr = `${AllowedNumber}`; // "1" | "2" | "3"

相关内容

  • 没有找到相关文章

最新更新