使用 `omit` 函数移除敏感信息

export default function omit<T extends object, K extends keyof T>( obj: T, fields: K[] | readonly K[], ): Omit<T, K> { const clone = { ...obj }; if (Array.isArray(fields)) { fields.forEach(key => { delete clone[key]; }); } return clone; }

title: omit
nav:
title: Demo
path: /demo

设计文档:omit 函数

目标与用途

omit 函数旨在从给定的对象中移除指定的一组属性(键),并返回一个新的对象,新对象包含了原对象所有属性但不包含被移除的属性。这个函数适用于 TypeScript 编程环境,提供了类型安全的操作,确保移除的属性与原始对象中的属性类型一致。

功能概述

该函数接受两个参数:

  1. obj: 类型为 T 的对象,其中 T 是泛型约束,表示任意对象类型。
  2. fields: 类型为 K[] | readonly K[] 的数组,其中 K 也是泛型约束,扩展自 keyof T,代表 obj 中的任何合法键名。

函数返回一个类型为 Omit<T, K> 的新对象,这里的 Omit 是 TypeScript 中的一个内置实用工具类型,用于创建一个排除了指定键的新类型。

函数签名与实现

export default function omit<T extends object, K extends keyof T>( obj: T, fields: K[] | readonly K[], ): Omit<T, K> { // 创建一个对原始对象的浅拷贝 const clone = { ...obj }; // 遍历要移除的字段数组 if (Array.isArray(fields)) { fields.forEach((key: K) => { // 从克隆对象中删除指定的键 delete clone[key]; }); } // 返回剔除了指定字段后的对象 return clone; }

实现细节

  1. 首先,通过对象扩展运算符 {...obj} 创建 obj 的浅复制,得到 clone 对象。
  2. 检查 fields 是否为数组,如果是,则使用 forEach 方法遍历数组中的每一个键名。
  3. 在遍历过程中,通过 delete 运算符从 clone 对象中删除对应键所对应的属性。
  4. 最后,返回经过处理后没有指定属性的 clone 对象。

使用示例

假设有一个用户对象接口:

interface User { id: number; name: string; email: string; password: string; }

我们可以使用 omit 函数移除敏感信息:

const user: User = { id: 1, name: 'Alice', email: 'alice@example.com', password: 'secret' }; const safeUser = omit(user, ['password']); // safeUser 的类型现在是 Omit<User, 'password'> { id: number; name: string; email: string; }

注意事项

  • 该函数执行的是浅复制,因此对于嵌套对象,只会删除顶层指定键所指向的基本类型或引用类型,不会递归删除深层结构中的属性。
  • 如果 fields 参数不是数组,函数不会有任何效果(由于进行了数组类型的检查)。

__EOF__

本文作者龙陌
本文链接https://www.cnblogs.com/longmo666/p/18127533.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   龙陌  阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示