interface Message{ Code: `SLA${number}`; }
类型定义试图将字符串值约束为SLAXXX的形式。其中SLA123和SLA01000是有效值。负号是数字的一部分,因此SLA-102或SLA0x10等输入仍然通过检查。我们如何强制代码字段具有SLA前缀,后面仅跟数字字符?
SLAXXX
SLA123
SLA01000
SLA-102
SLA0x10
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函数是推断泛型所必需的。
1条答案
按热度按时间uelo1irk1#
您可以使用helper函数完成此操作:
Playground
这里的helper函数是推断泛型所必需的。