使用众多接口中的一个作为函数中的参数

2023-12-19

我有一个这样的函数:

interface Interface1 {
    one: string
}
interface Interface2 {
    two: string
}
interface Interface3 {
    three: string
}
type ManyInterfacesInOneType = Interface1 | Interface2 | Interface3;

function bla(param1: ManyInterfacesInOneType) {

}

当我尝试使用这样的函数并调用该函数时bla({...}),它允许我放置来自所有接口的变量,但我希望该函数仅限于众多接口中的一个。所以我不希望这种情况发生:

bla({one: '', two: '', three: ''});

我也尝试这样做:

function bla<T extends object>(param1: T) {

}

但这并不需要泛型类型,因此它甚至没有真正的帮助。

我有什么想法可以让这项工作成功吗?


可以用小助手来做:

interface Interface1 {
    one: string
}
interface Interface2 {
    two: string
}
interface Interface3 {
    three: string
}
type Union = Interface1 | Interface2 | Interface3;

// credits goes to https://stackoverflow.com/questions/65805600/type-union-not-checking-for-excess-properties#answer-65805753
type UnionKeys<T> = T extends T ? keyof T : never;
type StrictUnionHelper<T, TAll> =
    T extends any
    ? T & Partial<Record<Exclude<UnionKeys<TAll>, keyof T>, never>> : never;

type StrictUnion<T> = StrictUnionHelper<T, T>


function bla<T extends Union,>(param1: StrictUnion<Union>) {

}

bla({ one: 'one' }) // ok
bla({one:'one', two:'two'}) // error

操场 https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgJLmvJBGZBvAKGWOQHsQIAuZAZzClAHMCBfA0SWRFdTrCAEz4iJMAHdS1OgxDM2HTNzQYuSAMzCSyMAAsoEKrXpNWBMAE8ADigCqIYOWQBeZX264APq8VIhX3j4QagDcBAQA9OHICPoAJsBgNMiMpBBJYKTIOmBgljSUkXSIANakAG6YADakYgB0CKQAtuEAjgCuaWAOIDThAGwArAAcAAwDfSMj4RbWALRt9uSzIKRgswg6EAjFTLMwpFCzEAAeSDQ0s5ZQpNZQXWkAxHA9YtCzg6MDAOwDamZWtkWIAA0hBzDQADwAFQAfM5kFDkCdICBYklEQB%20ZDFMGkGAI5DUCgVKChGYoADKxgQYDs3QAEhBKrdoQAaBEAQUqlThThExERyIgqKSz3M-OQWMRADJkAAFOB3YBwSoQgBKWwOsQhAFFTpU2rEIBC6eRQeDoVyeeyceY8QiYezidAYXCiRASaF-tZkFSGDTTSBobzfdTaUDGczoGyHWECDAFjTusgAEaVODQpHHFFo5CB1kwgAUlkVcEa2GofuAAaBJqBMIAlMJTAQ03BC3gyBRqABycgQHvIFhNyJkYqt9Md-uUPsUHvs8SSHuLnvD5Cj6DXKBAA

Here https://catchts.com/,在我的博客中,您可以找到更多在实践中有用的实用程序类型的示例,因为所有这些示例都取自此处(stackoverflow)

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

使用众多接口中的一个作为函数中的参数 的相关文章

  • 在 contenteditable div 中选择范围

    我有一个contenteditablediv 和其中的一些段落 这是我的代码 div style border solid 1px black width 300px height 300px div Hello world div div
  • 以编程方式填写reactjs表单

    我正在编写一个用户脚本 但无法填写由reactjs制作的表单 我的代码 document querySelector id username value email protected cdn cgi l email protection
  • 使用 JavaScript 禁用第三方 cookie

    我正在努力根据所有在欧盟运营的公司的数据保护规则实施新的 Cookie 政策合规性 根据该规则 用户在使用任何网站时必须能够拒绝 接受除必需的 Cookie 之外的所有内容 在我客户的网站中 我可以看到正在存储以下第三方 cookie ga
  • 如何使用javascript将大图像转换为十六进制?

    如果我尝试将图像转换为十六进制 无论我使用哪个函数 我都会收到此错误消息 该图像的大小为 7 MB 19812 毫秒 清理 1401 2 1455 0 gt 1401 2 1455 0 MB 9 9 0 ms 自上次 GC 以来 8 3 m
  • 如何针对 Node.js 中发生的每个错误发送电子邮件?

    假设我的 node js 应用程序正在运行 如果出现错误 我的意思是所有错误 不仅仅是网络错误 如果出现错误 则很重要 我如何调用函数向我发送电子邮件 基本上 在我希望它写入 err out 之前 我希望向我发送一封电子邮件 我正在使用no
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • Draggable JS Bootstrap 模式 - 性能问题

    对于工作中的项目 我们在 JavaScript 中使用 Bootstrap Modal 窗口 我们想让一些窗口可移动 但我们遇到了 JQuery 的性能问题 myModal draggable handle modal header Exa
  • React-Redux:state.setIn() 和 state.set() 有什么区别?

    我见过使用setIn and set 在一些react redux代码中 state setIn state set 我在这里找到了一些文档https facebook github io immutable js https facebo
  • 调整图像大小并将画布旋转 90 度

    这里有很多关于在 js 上使用画布旋转图像的主题 我阅读了其中的大部分内容 但无法找到解决我的问题的方法 我正在接收任何分辨率的图像 来自上传组件 我将其大小调整为 1024x768 如下所示 var canvas document cre
  • 尝试将数据存储在点击器网站中

    我正在尝试存储一个名为的变量score无论何时刷新 您都会一次又一次地使用它 我不明白的是它的代码是什么 我尝试了一些方法 但似乎都不起作用 这是我的答题器网站 但是当我尝试使用 JavaScript 来存储它时 它不起作用window o
  • Vuejs 2:去抖动不适用于手表选项

    当我在 VueJs 中反跳此函数时 如果我提供毫秒数作为原语 它就可以正常工作 但是 如果我将其提供为对 prop 的引用 它会忽略它 这是道具的缩写版本 props debounce type Number default 500 这是不
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • 代码镜像错误:未捕获错误:扩展集中无法识别扩展值([对象对象])

    全部 我目前正在从事一个React Electron项目 该项目的目标是完成一个Markdown编辑器 当我配置codemirror 该程序报告错误说 Uncaught Error Unrecognized extension value
  • 对于只触及我的工作表的 Google 表格脚本,收到“此应用程序未经验证”

    我正在编写一个 Google Sheets 脚本 我只想访问与 gs 文件关联的同一电子表格中的数据 似乎我应该有权在自己的电子表格中运行脚本 但是每当我运行一个函数时 我都会得到一个This app isn t verified信息 我该
  • 在 JavaScript 循环之外声明变量可以提高速度和内存?

    C 也有类似的问题 但我们没有看到 JavaScript 的任何问题 在循环内声明变量是否可以接受 假设循环有 200 次迭代 使用样本 2 相对于样本 1 是否有性能要求 内存和速度 我们使用 jQuery 来循环 它提高了我们将 var
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening
  • Jquery - 选择选项后如何获取选项的特定数据类型?

    我将直接跳到标记 然后解释我想要做什么 HTML 选择选项
  • 如何使用asm.js进行测试和开发?

    最近我读到asm js规范 看起来很酷 但是是否有任何环境 工具来开发和测试这个工具 这还只是处于规范阶段吗 您可以尝试使用 emscripten 和 ASM JS 1 并从侧分支在 firefox 构建中运行它 有关 asm js 的链接

随机推荐

  • 在 SPSS 宏中循环遍历并行列表/数组

    我想编写一个SPSS宏来执行三个操作 生成自定义表 清洁输出窗口 导出表 如您所知 SPSS 宏工具允许使用两种类型的循环 数字 如 do i x to y 和 list for every 像 do i in 1 我的目标是创建一个带有如
  • 是否可以在没有 REST 请求的情况下创建 Kafka 连接器?

    是否可以在没有 REST 请求的情况下创建 Kafka 连接器 我已经通过 java 代码启动了我的工作程序 分布式 并希望我的连接器也随之启动 我不想使用 REST 调用 不是来自浏览器 也不是来自代码 来创建我的连接器 我只想要一个简单
  • codeigniter 数据库移动到另一个表

    如何解决这个 codeigniter 问题 我有一个数据库表 Mysql 我需要使用 Php Codeigniter 框架将其所有字段内容移动到另一个表 将数据从一个表插入到另一个可在我的模型和控制器中使用的表的语法是什么 我尝试使用这些
  • Angular 2 核心模块和功能模块的区别

    我不明白之间的区别core https angular io docs ts latest guide ngmodule html core module and feature https angular io docs ts lates
  • 标签“文件系统”出现问题

    出于娱乐原因 我编写了一个 PHP 类 它用标签对文件进行分类 而不是以分层方式进行分类 标签以 tag1 tag2 tagN MD5 EXTENSION 的形式存储在文件名本身中 因此我坚持使用FS OS 施加的字符限制 255 这是课程
  • WSL-2:哪些端口会自动转发?

    我已经研究 WSL 2 一段时间了 但并不完全了解主机和 WSL 2 区域之间的流量是如何路由的 在某些来源中 WSL 2 使用的所有端口似乎都会自动可供主机使用 比如在微软的这个教程 https learn microsoft com e
  • 在 Symfony 中防止 Doctrine 的查询缓存

    在我的 Symfony Doctrine 应用程序中 我有一个按 RANDOM 排序的查询 我多次调用相同的方法 但看起来查询的结果正在被缓存 这是我的相关代码 query table gt createQuery p gt select
  • 如何在 Chrome 应用程序中包含数据文件以供本机客户端模块读取

    如果我有一个 Chrome 打包应用程序 其中还包含 PNaCl NaCl 模块 是否有办法在打包应用程序中包含一些数据文件 然后 NaCl 模块将读入这些数据文件 我不需要编写任何文件 只需包含本机模块需要使用的一些数据文件即可 Java
  • Jruby 中的 Java 数组

    我有一个 Java 库 我正在从中提取一些数据 它输出一个 3D 数组 但是我无法用它做任何事情 D 5615a6e0 是我得到的回应 我尝试过映射它 arr arr map arr arr to a 但我什么也没得到 解析这个java数组
  • Android 稍后通知用户

    我想在android中创建一个应用程序 其中用户选择未来的某一天 然后 当那一天到来时 他会收到通知 我知道这可以通过日历或注释来完成 但这并不对我来说很重要 我有两个与前一个问题相关的问题 A 我该如何执行通知 我在其他地方读到过有关向用
  • 停止/取消执行 FFmpeg 命令

    Android 有可用的 FFmpeg Static 二进制 我们可以在 FFmpeg 执行某些操作时停止 取消某些 FFmpeg 执行 命令 https github com WritingMinds ffmpeg android jav
  • 为什么 jQuery 事件在就绪函数之外时不触发,即使文档已就绪?

    尽管 DOM 似乎已加载 控制台中显示 就绪 为什么在这种情况下单击事件未触发 document ready function console log ready p click function alert You clicked on
  • 如何在页面加载时逐个淡入图像?

    我创建了以下代码 在页面加载时向页面上的所有 div 添加 opacity 1 这样做时 所有图像都会在页面加载时看到 但我希望每个图像都慢慢淡入 并且在一个图像完全加载 可见后 我希望第二个图像加载完全相同 然后加载第三个图像 我怎样才能
  • Java中可以更改内部类的外部类实例吗?

    在Java中 每当创建内部类实例时 它都会与外部类的实例相关联 出于好奇 是否可以将内部类与外部类的另一个实例相关联 是的 这是可能的 尽管这对我来说听起来是一个非常糟糕的主意 这个想法是设置否则final使用反射指向外部实例的指针 不保证
  • 绘图不显示

    我有一个相当简单的 xml 文件 其中有一个图像按钮 该图像在图形布局 xml 设计器上显示良好 当我运行开发构建时显示良好 但一旦我创建签名的 apk 文件并运行它 图像就不再显示 这只是一个空按钮 我想不出原因 有什么想法吗 xml 文
  • LINQ to SQL 将不会生成可控制查询

    我正在使用 LINQ To Sql 不是实体框架 System Data Linq DataContext 库 访问 SQL Server 2005 数据库并使用 Net Framework 4 表 dbo Dogs 有一个类型为 CHAR
  • '{"errors":{"base":["禁止。需要用户。"]}}'

    大家好 我正在尝试上传它向我展示的用户个人资料图片 errors base 禁止 需要用户 这个错误请让我知道我做错了什么 QBContent uploadFileTask profilePic true new QBCallbackImp
  • docker swarm - 如何平衡 swarm 集群中已经运行的容器?

    我在 AWS 上有一个带有 2 个节点的 docker swarm 集群 我停止了这两个实例 最初启动了 swarm manager 然后启动了worker 在停止实例之前 我运行了一个服务 该服务在管理器和工作人员之间分配了 4 个副本
  • 保留标识符在编译的哪个阶段被保留?

    只是工作中的一点好奇心 在从事危险的工作时 我开始考虑各种编译器及其相关标准库的实现 以下是我的想法的进展 某些类别的标识符保留供 C 和 C 中的实现使用 编译器必须执行编译阶段 预处理 编译 链接 就好像它们是按顺序执行的一样 C 预处
  • 使用众多接口中的一个作为函数中的参数

    我有一个这样的函数 interface Interface1 one string interface Interface2 two string interface Interface3 three string type ManyInt