【问题标题】:Define a TypeScript type that takes a lowercase word定义一个接受小写单词的 TypeScript 类型
【发布时间】:2021-08-28 10:33:30
【问题描述】:

有没有办法在 TypeScript 中定义这种类型?比如:

type lowercaseWord = /[a-z]/

但这定义了一个字符串? (我认为上面的代码将定义一个正则表达式。)

【问题讨论】:

  • TypeScript 中没有正则表达式类型,因此没有对应于“仅由小写字母组成的字符串”的特定类型。您可以创建一个泛型类型约束和一个辅助函数。你想支持还是禁止外来字符集? this 接受它们,this 代码拒绝它们。如果您想将其中任何一个作为答案,请告诉我。
  • @jcalz 聪明的解决方案!
  • 模板文字类型可以做到这一点,但你真的不想这样做。如果这不是假设,也许考虑分享您的用例。品牌类型可能是最佳选择。

标签: javascript typescript types


【解决方案1】:

是和不是。有内置的 int (intrinsic) 类型LowerCase,但它可以用作实用程序类型。它作为String.prototype.toLowerCase 工作,而不是作为正则表达式。 见例子:

type Result = Lowercase<'A'> // 'a'

Playground

Here你可以找到更多类型:CapitalizeUncapitalizeLowercaseUppercase

如果你想应用这样的限制,可以在函数中做:

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

请记住

const x: Lowercase<string> = 'A' // no error

不会触发错误

【讨论】:

  • 谢谢,如何为any小写单词定义类型?
  • 我认为Lowercase&lt;/[a-z]/&gt; 不起作用。
  • 哦,也许我误解了这个问题。您需要将字符串类型包装到 Lowercase 实用程序中。不允许在类型范围内使用正则表达式
  • 请注意,在您的代码中lower("123") 被接受;那是OP想要的吗?禁止大写字母与只允许小写字母不同,因为字母不是唯一存在的字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 2022-10-12
  • 2020-04-03
  • 2011-09-02
  • 2019-04-27
  • 2011-03-19
相关资源
最近更新 更多