可以将 Typescript 中的类型定义为具有字符组合吗?
Can be a type in Typescript defined to have a combination of characters?
让我举例说明。
在名为 Component
的字段中,您应该能够获得这些值> "M"、"B"、“A.
所以你继续定义:
type Component = "M" | "B" | "A";
到目前为止一切顺利。但也应该可以将这些组合起来,像这样分配:
const MyComponent : Component = "MB";
要么
const MyComponent : Component = "BA";
如何定义?
目前使用 TypeScript 无法做到这一点,但您可以使用 RegEx 验证此类字符串,以下线程给出了如何执行此操作的示例:
How can I split a string into segments of n characters?
您也可以使用这个正则表达式:
let value = 'MBA';
// string length 1-3 and contains M,B,A combinations
let validatorRegEx = /^([M|B|A]{1,3}$)/i;
if(validatorRegEx.test(value)) {
// code ...
}
只需为您的数据找到一个接口 - 看起来您有一小部分简单的值作为 Component
属性 的域数据。所以也许你应该扩展你的类型(联合):
type Component = "M" | "B" | "A" | "MA"
你对引入枚举(字符串)有什么看法?
enum Direction {
A: "A",
B: "B",
M: "M",
AB: "AB",
// more values
}
最后 - 不要将数据类型视为验证器。因此,也许在您的情况下,您应该只使用简单类型 "string" 并按需或在初始化时对其进行验证。
从 TypeScript 4.1 开始,这可以通过 template literal types 实现。
例如:
type Component = "M" | "B" | "A";
type ComponentCombination = `${Component}${Component}`;
const comb: ComponentCombination = "MB";
让我举例说明。
在名为 Component
的字段中,您应该能够获得这些值> "M"、"B"、“A.
所以你继续定义:
type Component = "M" | "B" | "A";
到目前为止一切顺利。但也应该可以将这些组合起来,像这样分配:
const MyComponent : Component = "MB";
要么
const MyComponent : Component = "BA";
如何定义?
目前使用 TypeScript 无法做到这一点,但您可以使用 RegEx 验证此类字符串,以下线程给出了如何执行此操作的示例: How can I split a string into segments of n characters?
您也可以使用这个正则表达式:
let value = 'MBA';
// string length 1-3 and contains M,B,A combinations
let validatorRegEx = /^([M|B|A]{1,3}$)/i;
if(validatorRegEx.test(value)) {
// code ...
}
只需为您的数据找到一个接口 - 看起来您有一小部分简单的值作为 Component
属性 的域数据。所以也许你应该扩展你的类型(联合):
type Component = "M" | "B" | "A" | "MA"
你对引入枚举(字符串)有什么看法?
enum Direction {
A: "A",
B: "B",
M: "M",
AB: "AB",
// more values
}
最后 - 不要将数据类型视为验证器。因此,也许在您的情况下,您应该只使用简单类型 "string" 并按需或在初始化时对其进行验证。
从 TypeScript 4.1 开始,这可以通过 template literal types 实现。 例如:
type Component = "M" | "B" | "A";
type ComponentCombination = `${Component}${Component}`;
const comb: ComponentCombination = "MB";