首页 > 其他分享 >使用 `omit` 函数移除敏感信息

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

时间:2024-04-10 21:47:54浏览次数:18  
标签:obj 函数 对象 fields clone 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: '[email protected]', password: 'secret' };
const safeUser = omit(user, ['password']);

// safeUser 的类型现在是 Omit<User, 'password'> 即 { id: number; name: string; email: string; }

注意事项

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

标签:obj,函数,对象,fields,clone,omit,移除
From: https://www.cnblogs.com/longmo666/p/18127533

相关文章

  • Sort函数的使用
    std::sort函数是<algorithm>头文件中的一个模板函数,用于对容器中的元素进行排序。通常,std::sort函数需要三个参数:指向要排序序列的起始位置的迭代器。指向要排序序列的结束位置之后一个位置的迭代器。一个可选的比较函数或可调用对象,用于确定排序顺序。当你只传递两个参数给s......
  • 《C++程序设计》阅读笔记【7-堆和拷贝构造函数】
    ......
  • C语言: 字符串函数(下)
    片头在上一篇中,我们介绍了字符串函数。在这一篇章中,我们将继续学习字符串函数,准备好了吗?开始咯!1.strncpy函数1.1strncpy函数的用法strncpy是C语言中的一个字符串处理函数,它用于将一个字符串的一部分内容复制到另一个字符串中。其函数原型为:char*strncpy(char*dest......
  • 关于atoi和strtol函数
    提示:文章文章目录前言一、背景二、2.12.2总结前言前期疑问:本文目标:一、背景最近在牛课题HJ33整数与IP地址间的转换题目时,涉及到大量的字符串和整型数值的转换,重新看一下字符和整型转换的函数二、2.1​避免使用atoi、atol、atoll、atof函数字符串中可能......
  • python初学者笔记(7)——求和函数总结
    python经常要用到各种求和,例如列表求和,元素求和,利用函数求和,将这些方法总结发给大家!1.python两个数的求和函数defsum_2_num(num1,num2):result=num1+num2returnresult#必须在执行行输入,函数命名后必须调用,调用sum_2_num(),或者print()#sum_2_num(10,20......
  • python函数 学习第二部分
    函数大纲:六、函数说明文档#定义函数,进行文档说明defadd(x,y):"""函数说明:paramx:参数x表示其中一个加数:paramy:参数y表示另一个加数:return:返回两数相加的结果"""result=x+yreturnresultr=add(5,6)print(r)......
  • 自定义Python实用函数-返回指定目录及其子目录和指定文件扩展名的文件清单列表
    importosdefget_files(file_path,image_types_set=()):"""返回指定目录及其子目录下、指定文件扩展名的文件清单列表。若image_types_set参数为空,则返回图片文件清单列表。若image_types_set参数为['.*'],则返回所有文件清单列表。"""filenames......
  • mysql函数练习题
    ......
  • php中date() 函数
    实例格式化本地日期和时间,并返回格式化的日期字符串:<?php//Printsthedayechodate("l")."<br>";//Printstheday,date,month,year,time,AMorPMechodate("ljSofFYh:i:sA");?>定义和用法date()函数格式化本地日期和时间,并返回格式化的日期字符串。......
  • MySQL多表联合查询&聚合函数应用实例
     DDL——学生表——成绩表CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`......