Typescript - 键入以检查字符串是否仅包含特定字符

2023-12-02

如何对我们知道仅包含某些值的字符串进行类型检查。 例子:const binary = '1010000101000';我们知道,用十进制表示的二进制值只能是 1 和 0。为了进行更好的类型检查,对于这些类型的值来说,什么是好的类型定义。

type Binary = '0' | '1';不起作用,因为它们仅代表字符串的单个字符。但我们的想法是如何为整个字符串提供一个接口/类型,我们知道字符串中只包含某些类型的字符。

问题是不是为二进制值选择接口,它是如何声明/定义预定义字符串值的类型。


您可以使用递归输入:

type BinDigit = "0" | "1"

type OnlyBinDigit<S> =
    S extends ""
        ? unknown
        : S extends `${BinDigit}${infer Tail}`
            ? OnlyBinDigit<Tail>
            : never




function onlyBinDigit<S extends string>(s: S & OnlyBinDigit<S>) {
}



onlyBinDigit("01010101010011"); // OK 
onlyBinDigit("010101012"); // NOK

为了解释一下这里的打字,OnlyBinDigit是递归类型。

  • 基本情况:空字符串返回类型unknown.
  • 递归性:使用模板文字,我们可以分割字符串并在尾部进行递归调用,直到到达空字符串。
  • 在非递归部分,模板文字,如果第一个字符与类型不匹配(这里'0' | '1'),它将返回never从而导致类型检查失败。

操场

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript - 键入以检查字符串是否仅包含特定字符 的相关文章

随机推荐

  • iOS isKindOfClass 和 isMemberOfClass 之间的区别

    两者有什么区别isKind of aClass AnyClass 和isMember of aClass AnyClass 斯威夫特函数 Objective C 中的原始问题 两者有什么区别isKindOfClass Class aClas
  • datepicker 不会触发 onchange 事件

    我有两个输入日期字段 一个通过 JQuery datepicker 生成日期 我希望第二个通过 onblur 或 onchange 事件从第一个输入中获取值 当我手动输入日期时它工作正常 但一旦通过 datepicker 输入 它不会触发第
  • 调试代码时 Ninject 出现无源可用错误

    我已经使用NuGet安装了最新版本的Ninject v2 2 1 4 然后我创建了自己的 NinjectDependencyResolver 归功于亚当 弗里曼和史蒂夫 桑德森 public class NinjectDependencyR
  • 第一次运行flutter时报错:没有找到pubspec.yaml文件

    我试着跟随Get Stated here https flutter io setup windows And got gt flutter run Error No pubspec yaml file found This command
  • Firebase 数据库规范化

    所以我制作了一个简单的应用程序 一个三轮车巡逻应用程序 您可以通过登录并填写表格来举报鲁莽的三轮车司机 在我们的城市这里没有任何问题 报告表格包含 created at description lat lng plateNumber 到目前
  • 用于按行“连接 If”的 VBA 用户定义函数

    我有一些关于是否为特定站点执行特定 服务 例如鸟类调查 的数据 每项服务都有 是 或 否 E G A 列包含站点名称 例如 A B C D 和 E A1 中标题为 站点名称 A2 中标题为 A 依此类推 B 列 B1 中包含 鸟类调查 然后
  • 捕获分段违规并继续生活

    我正在编写一个程序来检查它自己的地址空间 具体来说 我关心所有 malloc 的数据块 如果有一些系统调用来获取它们的列表 那就太棒了 对于我的应用程序 我不能使用 LD PRELOAD wrap 或任何额外的命令行选项 如果有办法做到这一
  • 使 arraylist 上的 select -unique 返回 arraylist 而不是字符串

    我在下面的类中有三个数组列表 我想让它们保持独特 但是 如果数组列表中只有一项 字符串 并且您使用 select unique 或任何其他方法来实现此目的 它将返回字符串而不是字符串列表 用 包围它也不起作用 因为这会将其转换为数组而不是数
  • Android内存泄漏,没有静态变量

    我是一名初级 Android 开发人员 作为一个实践项目 我正在尝试制作一个可以拍照 将其保存到外部存储并在 ImageView 中显示的活动 几乎一切似乎都正常 但是 我似乎有内存泄漏 当屏幕方向改变时 我相信活动会被破坏 然后重新创建
  • 存储过程中的账本报告逻辑

    我有一个名为 患者分类帐报告 的存储过程 我需要在其中显示患者的日常交易详细信息和余额金额 我正在为您提供以下代码中的一个采样数据 这些数据是如何插入到我的临时表中的sp create table Patient ledger PATIEN
  • Python 是否有相当于部分类的东西?

    使用 新 样式类 我使用的是 python 3 2 有没有办法将一个类拆分为多个文件 我有一个大类 从面向对象设计的角度来看 考虑到耦合等 它实际上应该是一个类 但是为了便于编辑类 最好将其拆分为几个文件 如果您的问题确实只是在编辑器中处理
  • “gcloud builds 提交...”有什么作用?

    我想知道什么gcloud 构建提交做 就我而言 我正在运行GCloud运行教程 The 官方文档指出它提交构建 这不是一个特别有用的信息 有人可以提供更多背景信息吗 什么是build 一个图像 jar 文件 这个 构建 被提交到哪里 提交
  • 更改 PHP 中包含内容的相对链接路径

    我的服务器根目录下有一个 PHP 文件 索引 php 哪个include的 DIR main php 现在 DIR main php 具有到许多附近文件的相对链接 所有相关链接均已损坏 我可以通过任何方式更改相对 URL 基本路径对于链接
  • 在Python 3中使用MagicMethods计算欧几里德距离

    我有一个为我计算欧几里德距离的代码 class Point A point in two dimensional space def init self x y self x x self y y def eq self other ret
  • 使用两个 android spinner,一个依赖于另一个

    我已经浏览了很多代码并试图找出我做错了什么 但我不及格并且浪费时间 这会很简单 但我无法弄清楚 我正在开发一个 Android 应用程序 需要在一项活动中放置 2 个旋转器 第二个微调器将根据第一个微调器中选择的条目进行填充 听起来很简单吧
  • Android 中的 Webview 能够运行 php

    我正在开发一个具有 Web 视图的 Android 应用程序 我还需要加载 html jquery js 和 php 现在我可以加载 html jquery css javascript 但我的问题是我无法在离线的 Web 视图中加载 ph
  • 为什么在构造函数上创建新线程是不好的做法? [复制]

    这个问题在这里已经有答案了 可能的重复 Java 为什么不在构造函数中启动线程 如何终止 我习惯了跑步FindBugs在我的代码上 以便发现错误或不良做法 今天它抱怨我在类构造函数中启动一个线程 真的是一件坏事吗 你能解释一下为什么吗 如果
  • 如何在 Windows 中获取每个进程的磁盘活动

    我需要提取给定进程的磁盘统计信息 我可以获取列出的进程并获取总体信息 例如使用 WMI 和 PerformanceCounters 列出的 CPU 和内存 但信息都是捆绑在一起的 有什么方法可以提取每个进程的这些数据 有点像 Windows
  • 获取当前位置 Android Kotlin

    我尝试在我的应用程序中使用 GM API 获取当前位置 使用 Android Studio 但是 如果我单击触发 getLocation 函数的按钮 我总是会进入 catch 块 但我不知道为什么 我的移动设备已连接以进行测试 这是 get
  • Typescript - 键入以检查字符串是否仅包含特定字符

    如何对我们知道仅包含某些值的字符串进行类型检查 例子 const binary 1010000101000 我们知道 用十进制表示的二进制值只能是 1 和 0 为了进行更好的类型检查 对于这些类型的值来说 什么是好的类型定义 type Bi