Kou*_*sha 4 javascript typescript
假设我想允许使用十六进制字符串;所以唯一允许的值为 0-9a-f。TypeScript 有没有办法定义只接受某些字符串的类型字符串?IE
// valid
const valid: HexString = '123abc';
// invalid
const invalid: HexString = 'ijk';
Run Code Online (Sandbox Code Playgroud)
我知道正则表达式类型定义是这里的一个提案,想知道是否有办法同时实现这一点。
仅使用“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
Run Code Online (Sandbox Code Playgroud)
这种模式对于 PositiveInteger 和 PasswordHash 之类的东西也很有用,在这些情况下,您不希望任何人意外地将纯字符串分配给您想要强制人们使用返回 PasswordHash 的函数的值
| 归档时间: |
|
| 查看次数: |
4026 次 |
| 最近记录: |