当前位置: 首页 > 知识库问答 >
问题:

前端 - ts类型体操,字符串类型怎么检测空格?

令狐建修
2024-08-19

我申明了三个类型

/** 百分比字符串 */
declare type VCSSPercentString = `${number}%`
/** 像素字符串 */
declare type VCSSPixelsString = `${number}px`

declare type VCSSString = VCSSPixelsString | VCSSPercentString

使得我可以如下写

let a :VCSSString = '50%'
let b :VCSSString = '99px'
let c :VCSSString = `${ 20 }%`

如何修改上面的类型申明,使得他允许中间有空格

let d :VCSSString = '50 %'
let e :VCSSString = '99  px'
let f :VCSSString = `${ 20 } %`

共有2个答案

贺佑运
2024-08-19

可以用正则表达式啊

薛焱
2024-08-19

为了在 TypeScript 中允许字符串类型中包含空格,你可以使用模板字符串类型结合正则表达式类型守卫(虽然类型守卫主要用于运行时检查,但在这里我们主要关注类型定义)。然而,直接在类型定义中处理空格的复杂性较高,因为 TypeScript 的类型系统主要是静态的,不直接支持正则表达式匹配。

不过,你可以通过定义一个更通用的字符串类型,然后可能通过运行时检查来确保字符串符合你的要求。但如果你只想在类型层面处理,你可以使用模板字符串来允许空格的存在,但这样也会允许其他任何字符,因为 TypeScript 的模板字符串类型非常灵活。

下面是一个修改后的类型定义,它允许在数字和单位之间有空格:

/** 百分比字符串,允许空格 */
declare type VCSSPercentStringWithSpaces = `${number} ${'%'}` | `${number}%`

/** 像素字符串,允许空格 */
declare type VCSSPixelsStringWithSpaces = `${number} ${'px'}` | `${number}px`

/** 允许空格的 VCSS 字符串 */
declare type VCSSStringWithSpaces = VCSSPixelsStringWithSpaces | VCSSPercentStringWithSpaces

// 使用
let a: VCSSStringWithSpaces = '50%'
let b: VCSSStringWithSpaces = '99px'
let c: VCSSStringWithSpaces = `${20} %`
let d: VCSSStringWithSpaces = '50 %'
let e: VCSSStringWithSpaces = '99  px'
let f: VCSSStringWithSpaces = `${20} %`

注意,这个定义允许在数字和单位之间有一个或多个空格,但它也允许没有空格的情况。如果你想要严格限制必须有空格,你可以去掉没有空格的选项,但这样做可能会限制灵活性。

如果你需要更复杂的验证(比如确保只有一个空格),你可能需要在运行时使用正则表达式来验证字符串,因为 TypeScript 的类型系统本身不支持这种级别的验证。

对于大多数用途,上面的定义应该足够灵活,同时保持类型安全。如果你确实需要在运行时验证字符串格式,你可以编写一个函数来执行这种验证。

 类似资料:
  • 2.3.2 字符串类型的操作 在实际应用中,对字符串最常用的操作是访问字符串中的个别字符。Python 语言为字 符串类型提供了索引操作,可以用来访问字符串内部的任意组成字符。 字符串是字符序列,每个字符在序列中的位置都由一个从 0 开始的整数编号指定,这个 编号称为位置索引。因此,第一个位置的索引是 0,第二个位置的索引是 1,依此类推。通 过索引我们可以指定字符串中的任意位置,从而可以访问该位

  • 主要内容:CHAR 和 VARCHAR 类型,TEXT 类型,ENUM 类型,SET 类型字符串类型用来存储字符串数据,还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比较,还可以进行正则表达式的匹配查找。 MySQL 中的字符串类型有 CHAR、 VARCHAR、 TINYTEXT、 TEXT、 MEDIUMTEXT、 LONGTEXT、 ENUM、 SET 等。 下表中列出了 MySQL 中的字符串数据类型,括号中的 表示可以为其指定长度。 类型名称 说明 存储

  • redis 字符串类型

  • 这章我们来着重介绍一下字符串。 刚刚学习Rust的同学可能会被Rust的字符串搞混掉,比如str,String, OsStr, CStr,CString等等…… 事实上,如果你不做FFI的话,常用的字符串类型就只有前两种。我们就来着重研究一下Rust的前两种字符串。 你要明白的是,Rust中的字符串实际上是被编码成UTF-8的一个字节数组。这么说比较拗口,简单来说,Rust字符串内部存储的是一个u

  • 元组(Tuple) 在别的语言里,你可能听过元组这个词,它表示一个大小、类型固定的有序数据组。在 Rust 中,情况并没有什么本质上的不同。不过 Rust 为我们提供了一系列简单便利的语法来让我们能更好的使用他。 let y = (2, "hello world"); let x: (i32, &str) = (3, "world hello"); // 然后呢,你能用很简单的方式去访问他们: /