ale*_*nco 6 javascript types typescript
有什么方法可以在 TypeScript 中定义这种类型吗?就像是:
type lowercaseWord = /[a-z]/
Run Code Online (Sandbox Code Playgroud)
但这定义了一个字符串?(我认为上面的代码将定义一个正则表达式。)
jca*_*alz 12
(在这里为后代记录,尽管问题略有不同并且要求[a-z])
从 TypeScript 4.8 开始,现在支持将内部字符串操作类型与宽类型(例如string. 这是在microsoft/TypeScript#47050中实现的,但在TS 4.8 发行说明中没有提及。
所以现在,Lowercase<string>仅对应于小写字符串(在 后保持不变的字符串.toLowerCase()),而在 TypeScript 4.7 及更低版本中,它可以匹配任何string:
let str: Lowercase<string>;
str = "abc"; // okay
str = "DEF"; // error in TS4.8+
Run Code Online (Sandbox Code Playgroud)
是和不是。有内置 int (内在)类型LowerCase,但它作为实用程序类型工作。它作为正则表达式工作String.prototype.toLowerCase,而不是作为正则表达式。参见示例:
type Result = Lowercase<'A'> // 'a'
Run Code Online (Sandbox Code Playgroud)
在这里您可以找到更多类型:Capitalize, Uncapitalize, Lowercase,Uppercase
如果您想应用此类限制,可以在函数中执行以下操作:
type UpLetters = 'A' | 'B' | 'C' // provide all allowed letters
type LowLetters = Lowercase<UpLetters>
type Letters = UpLetters | LowLetters
type IsAllowed<T extends string> = T extends Letters ? T extends Lowercase<T> ? T : never : never
const lower = <T extends string>(str: IsAllowed<T>) => null
/**
* Ok
*/
lower('a') // ok
/**
* Error
*/
lower('A') // error
lower('1') // error
lower('$%^') // error
Run Code Online (Sandbox Code Playgroud)
请记住
const x: Lowercase<string> = 'A' // no error
Run Code Online (Sandbox Code Playgroud)
不会触发错误
| 归档时间: |
|
| 查看次数: |
7780 次 |
| 最近记录: |