typescript 数字模板文本类型中不允许使用字母数字字符

iqxoj9l9  于 2023-02-20  发布在  TypeScript
关注(0)|答案(1)|浏览(117)
interface Message{
   Code: `SLA${number}`;
}

类型定义试图将字符串值约束为SLAXXX的形式。其中SLA123SLA01000是有效值。
负号是数字的一部分,因此SLA-102SLA0x10等输入仍然通过检查。
我们如何强制代码字段具有SLA前缀,后面仅跟数字字符?

uelo1irk

uelo1irk1#

您可以使用helper函数完成此操作:

type Digit =  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;

type OnlyDigits<S> = S extends '' ? unknown : S extends `${Digit}${infer Tail}` ? OnlyDigits<Tail> : never;

type Code =  `SLA${Digit}`;

function code<S extends string>(s: `SLA${S & OnlyDigits<S>}`): Code {
  return s as Code;
}

const foo = code(`SLA0000011`);
const bar = code(`SLA000x011`); // KO

Playground
这里的helper函数是推断泛型所必需的。

相关问题