Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类型脚本特定字符的类型字符串_Javascript_Typescript - Fatal编程技术网

Javascript 类型脚本特定字符的类型字符串

Javascript 类型脚本特定字符的类型字符串,javascript,typescript,Javascript,Typescript,假设我想允许一个十六进制字符串;因此,唯一允许的值是0-9a-f。在TypeScript中有没有一种方法可以定义一个只接受特定字符串的类型字符串?i、 e // valid const valid: HexString = '123abc'; // invalid const invalid: HexString = 'ijk'; 我知道Regex类型定义是一个建议,我想知道是否有一种方法可以同时实现这一点。仅适用于“OpaqueTypes”或“Nominal Types”,只要您有一个可以使

假设我想允许一个十六进制字符串;因此,唯一允许的值是0-9a-f。在TypeScript中有没有一种方法可以定义一个只接受特定字符串的类型字符串?i、 e

// 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