Typescript中Omit数据类型的理解

在 TypeScript 中,Omit 是一个内置的工具类型,它用于从对象类型中排除指定的属性,并返回剩余的属性。

Omit 的语法如下所示:

type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;

其中,T 表示原始类型,K 表示要排除的属性键的联合类型。

使用 Omit 类型时,我们可以指定要从原始类型中排除的属性,然后得到一个新的类型,该类型不包含指定的属性。

在实际开发中,我们如何去使用

interface User {
    id:number,
    username:string,
    password:string,
    email:string
}

// 使用Omit从User类型中排除"password"和"email"字段,创建PublicUserInfo类型
type PublicUserInfo = Omit<User,"password" | "email">;

const mockUser = {
    id:1,
    username:'jack',
    email:'jack@163.com',
    password:"hashed_password"
}

// 登录函数,验证用户名和密码是否匹配,若匹配则返回PublicUserInfo类型,否则返回null
function login(username:string,password:string): PublicUserInfo | null {
    if(username === mockUser.username && password === mockUser.password){
        return {
            id:mockUser.id,
            username:mockUser.username
        };
    }else{
        return null;
    }
}

// 用户个人资料组件,接收一个PublicUserInfo类型的user作为参数
function UserProfile({ user } : { user: PublicUserInfo }){
    return (
        <div>
            <h1>User Profile</h1>
            <p>id:{user.id}</p>
            <p>username:{user.username}</p>
        </div>
    )
}

const App = () => {
    // 模拟用户登录
    const loggedUser = login("jack","hashed_password")
    return (
        <div>
            <h1>在react中应用TS中omit类型</h1>
            { loggedUser ? <UserProfile user={loggedUser} /> : (<p>Login file</p>) }
        </div>
    )
}

export default App;

得出的效果如下: 

这段代码演示了在React中如何应用TS中的Omit类型。首先,我们定义了一个user接口,包含id.username、password和email字段。然后,使用0mit类型从User类型中排除了password和email字段,创建了PublicUserInfo类型。
接下来,我们使用mockUser对象模拟一个用户信息,包括id、username、email和password字段在login函数中,我们验证输入的用户名和密码是否与模拟用户的信息匹配。如果匹配,则返回个包含id和username字段的PublicUserInfo对象;否则,返回nu11。
UserProfile组件接收一个user参数,类型为PublicUserInfo,并展示用户的个人资料最后,在App组件中模拟用户登录,并根据登录状态渲染不同的内容

相关推荐

  1. TypeScript数组类型

    2023-12-15 12:26:04       7 阅读
  2. TypeScript 数据类型

    2023-12-15 12:26:04       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-15 12:26:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-15 12:26:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-15 12:26:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-15 12:26:04       20 阅读

热门阅读

  1. 热红外图像增强算法

    2023-12-15 12:26:04       37 阅读
  2. MySQL 8 中 utf8mb4 的强大:释放多语言数据的潜力

    2023-12-15 12:26:04       35 阅读
  3. 09 光流法实践

    2023-12-15 12:26:04       30 阅读
  4. spark从表中采样(随机选取)一定数量的行

    2023-12-15 12:26:04       43 阅读
  5. 【Rust】第四节:通用编程概念

    2023-12-15 12:26:04       38 阅读
  6. python传递给delphi dll只能显示第1个字符?

    2023-12-15 12:26:04       36 阅读
  7. axios不用封装单独上传图片文件

    2023-12-15 12:26:04       31 阅读
  8. redis的hash实现

    2023-12-15 12:26:04       39 阅读
  9. android常用

    2023-12-15 12:26:04       30 阅读
  10. Vue 循环渲染 v-for

    2023-12-15 12:26:04       33 阅读
  11. OSS上传pdf无法解析的问题

    2023-12-15 12:26:04       31 阅读