带方括号的 Typescript 类型声明

2023-12-01

刚刚发现以下代码片段https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and- Differentiating-types

type FunctionPropertyNames<T> = {
  [K in keyof T]: T[K] extends Function ? K : never;
}[keyof T];
type FunctionProperties<T> = Pick<T, FunctionPropertyNames<T>>;

what [keyof T]类型声明之后的含义以及如何命名?

Also [keyof T]看起来像是编译器键入的提示FunctionalPropertyNames是来自 T 的键,但为什么编译器不能从中推断出这一点[K in keyof T]?


简短说明:此用法获取所有属性的所有值类型。


首先,[]通过使用一个(或多个)键访问该类型来深入了解该类型之后

type A = { foo: string }
type B = A['foo'] // string

其次,这里有一个映射类型。这意味着它是一种映射某种类型的所有键、转换它,然后返回一个新类型的类型。

那么让我们先看看这一部分:

type StripNonMethods<T> = {
  [K in keyof T]: T[K] extends Function ? K : never;
}

任何T是,这将为所有键创建一个类型T其中每个属性的值是属性的名称(如果该值是函数)或never(如果它不是一个函数)。

这将改变这一点:

type T1 = { a(): void, b: number }

into:

type T2 = StripNonMethods<T1> // { a: 'a', b: never }

但这里想要的结果是字符串'a',因为我们试图获取所有属于函数的属性名称。因此,我们使用它自己的键深入研究该类型,它将所有属性的所有值作为并集返回[keyof T]在最后。

现在将返回:

 type T3 = T2[keyof T2] // 'a' | never

并且因为never根据定义,它永远不会存在,它是从联合中简化出来的,你会得到:

'a'

操场

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

带方括号的 Typescript 类型声明 的相关文章

随机推荐

  • 如何从 C# 调用 MongoDb 中存储的 JavaScript

    我正在评估将 SQL Server 数据库移植到 MongoDb 问题是移动存储过程 我读到了有关 MongoDb 存储 JavaScript 的内容 我想在 Net 中进行一些测试 我已经安装了 MongoDb 驱动程序 2 4 0 并在
  • 搜索数组中的连续值

    在数组中搜索连续值的最佳方法是什么 例如 搜索array a b in array x a b c 会产生1 因为这些值首先连续出现在该索引处 还没有测试过这个 但类似这样的事情应该可以 function consecutive value
  • 使用 PHP 接收 JSON POST

    我尝试在支付接口网站上接收 JSON POST 但无法对其进行解码 当我打印时 echo POST I get Array 当我尝试这个时我什么也没得到 if POST foreach POST as key gt value echo l
  • 圆与圆的交点

    如何计算两个圆的交点 我希望在所有情况下都会有两个 一个或没有交点 我有中心点的 x 和 y 坐标以及每个圆的半径 python 中的答案是首选 但任何工作算法都是可以接受的 两个圆的交点 保罗 伯克 编剧 The following no
  • Linq to SQL 是如何工作的?

    我在项目中使用 Linq to SQL 我使用它从 SQL 存储过程中获取数据 它工作完美 但我不明白 LINQ SQL 内部如何与 SQL Server 通信 它在获取数据后将数据存储在哪里 它从哪里获取连接字符串 提前致谢 更好读 ht
  • 为什么使用不带 lambda 的内联

    我试图了解如何使用inline修改正确 我了解一般情况 当我们内联 lambda 以防止过度分配时 如中所述docs 我正在检查 kotlin stdlib 并发现 Strings kt下面这段代码 kotlin internal Inli
  • 在vBulletin中使用curl登录网站

    我一直在尝试登录某个网站 www siamchart 论坛 按照此链接上的说明进行操作 使用 PHP cURL 登录远程站点 我无法通过登录 运行以下脚本后 它将我重定向到相同的登录页面 www siamchart forum 但没有成功登
  • 子类化 sklearn LinearSVC 以用作 sklearn GridSearchCV 的估计器

    我正在尝试创建一个子类sklearn svm LinearSVC用作估计器sklearn model selection GridSearchCV 子类有一个额外的函数 在本例中不执行任何操作 然而 当我运行这个时 我最终遇到了一个我似乎无
  • Delphi 中的丰富 GUI 应用程序

    我想在 Delphi 中创建一个具有丰富 UI 元素且没有 VCL 的应用程序 TForm 除外 每个组件 按钮 列表等 都需要支持完整的每像素 alpha 并且无需任何代码即可轻松创建 它应该是可剥皮的并且能够提供类似于 adobe ai
  • Boost program_options 将多个配置文件解析结果存储到一个 parsed_options 中

    我正在尝试解析命令行提供的任意数量的文件中未注册的选项 假设我有文件 configs0 ini configs1 ini configs2 ini 我想支持其中任意数量的 我的代码 简化 namespace po boost program
  • 根据依赖条件删除行

    删除多个参数上的行并不太困难 例如 data data fd 0 data cl 0 但是 在以下数据框中 data lt structure list id c 0L 0L 0L 0L 0L 0L 0L 0L 0L 0L 0L 0L 0L
  • Android如何让前置摄像头拍摄的视频不反相?

    我使用 MediaRecorder 录制视频 当使用后置摄像头时 它工作正常 但是当使用前置摄像头时 捕获的视频正在翻转 反转 意味着右侧的项目将出现在左侧 相机预览工作正常 只是最终捕获的视频翻转了 这是相机预览的样子 但最终的视频是这样
  • 默认短信应用程序的规则

    我已经阅读了许多文档 但尚未澄清默认短信应遵循的规则列表 Android Dev Blogspot说 仅接收 SMS DELIVER ACTION 广播的应用程序 用户指定的默认短信应用程序 能够写入短信提供商 如果我们的应用程序是默认的短
  • 通过批处理脚本从文本文件中读取特定的单词(第2行,第3行)

    我需要通过批处理脚本从文本文件中读取特定单词 假设我想要读取第 2 行第 3 行 这是代码 ECHO OFF cls SET P line Please enter Line number ECHO Line number entered
  • 清除最近的应用程序会擦除应用程序内存,并且我的接收器停止工作

    如果 MyApp 的接收器在后台运行 则它可以正常工作 public class MySmsReceiver extends WakefulBroadcastReceiver Override public void onReceive C
  • getpwnam_r内存泄漏

    我使用 getpwnam r 来处理程序中的客户端连接 可悲的是 它似乎分配了一个永远不会释放的缓冲区 相关的 valgrind 输出 15774 536 104 direct 432 indirect bytes in 2 blocks
  • 无法将 SonarQube 从 4.5.2 升级到 5.0

    升级到 SonarQube 的最新主要版本 5 0 失败 我们已遵循本指南http docs sonarqube org display SONAR Upgrading 如果我们尝试使用干净的数据库 一切都会正常 但这不是一个可接受的解决方
  • Angular 2 beta 中变量未使用获取响应数据进行更新

    我一直在尝试使用获取响应数据更新变量 以便在模板中为 ng For 指令绑定相同的变量 我收到响应并在控制台中看到它 但它不会更新我的代码中的变量 getStoreList 是我在单击事件上调用的函数 this stores 是我想用响应数
  • 为什么 numpy.array 这么慢?

    我对此感到困惑 def main for i in xrange 2560000 a 0 0 0 0 0 0 main time python test py real 0m0 793s 现在让我们用 numpy 来看看 import nu
  • 带方括号的 Typescript 类型声明

    刚刚发现以下代码片段https www typescriptlang org docs handbook advanced types html type guards and Differentiating types type Func