Javascript 类型脚本特定字符的类型字符串
假设我想允许一个十六进制字符串;因此,唯一允许的值是0-9a-f。在TypeScript中有没有一种方法可以定义一个只接受特定字符串的类型字符串?i、 eJavascript 类型脚本特定字符的类型字符串,javascript,typescript,Javascript,Typescript,假设我想允许一个十六进制字符串;因此,唯一允许的值是0-9a-f。在TypeScript中有没有一种方法可以定义一个只接受特定字符串的类型字符串?i、 e // valid const valid: HexString = '123abc'; // invalid const invalid: HexString = 'ijk'; 我知道Regex类型定义是一个建议,我想知道是否有一种方法可以同时实现这一点。仅适用于“OpaqueTypes”或“Nominal Types”,只要您有一个可以使
// valid
const valid: HexString = '123abc';
// invalid
const invalid: HexString = 'ijk';
我知道Regex类型定义是一个建议,我想知道是否有一种方法可以同时实现这一点。仅适用于“OpaqueTypes”或“Nominal Types”,只要您有一个可以使字符串成为十六进制代码的实现,实现如下
export type Opaque<K, T> = T & { __TYPE__: K };
type HexCode = Opaque<string, "HexCode">
const createHexCode = (str: string): HexCode => {
// implementation that forces string to be hexCode
return str.toString() as HexCode // casting is needed.
}
const test = createHexCode("#333");
const isAssignableString: string = test; // yes anything that is HexCode is still technically a string.
const isAssignableHexCode: HexCode = "standard string" // error
导出类型不透明=T&{uuuuuuuuuuuuuuuuuuu类型:K};
类型HexCode=不透明
const createHexCode=(str:string):HexCode=>{
//强制字符串为十六进制代码的实现
返回str.toString(),因为需要十六进制代码//强制转换。
}
常量测试=createHexCode(#333”);
const isAssignableString:string=test;//是的,任何十六进制代码在技术上仍然是字符串。
常量isAssignableHexCode:HexCode=“标准字符串”//错误
此模式也适用于PositiveInteger和PasswordHash等,您不希望任何人意外地将普通字符串指定给该值。您希望强制人们使用返回PasswordHash的函数。您可能希望实现
createHexCode()
如果传入的字符串与正则表达式不匹配,则引发运行时错误。或者,createHexCode()
返回一个HexCode |未定义的
。或者甚至isHexCode(str:string):str是HexCode
类型的guard。是的@jcalz这些肯定都很重要,我想我应该让他来决定,这完全取决于用例,因为即使只是返回默认值也可以在很多用例中工作(即游戏如何使缺失的纹理默认为紫色或突出的颜色,以便他们可以看到其缺失而不是抛出)type HexCode=Opaque
?您的意思是说type HexCode=Opaque
?