【问题标题】:How to build a custom Required interface in TypeScript?如何在 TypeScript 中构建自定义的必需接口?
【发布时间】:2022-01-21 05:10:57
【问题描述】:

我有一个包含以下字段的用户类型,我想在许多地方将它与不同的必填字段一起使用。 我想创建一个泛型类型并使用泛型传递所需的字段以减少样板。

我有什么:

type BaseUser = {
  id: number;
  name: string;
  job: string;
};

我尝试了什么:

type User<T extends (keyof BaseUser)[]> = {
  [K in keyof T as T[K]]: BaseUser[T[K]];
};

我希望它如何使用它:

function deleteUser(user: User<['id']> ) { };
function addUser(user: User<['name', 'job']> ) { };

任何帮助将不胜感激。
谢谢!

【问题讨论】:

    标签: typescript generics


    【解决方案1】:

    你可以这样做

    type BaseUser = {
      id?: number;
      name: string;
      job: string;
    };
    
    interface UserDelete {
      id: number
    }
    
    function deleteUser<BaseUser extends UserDelete>(user: BaseUser):BaseUser {
      return user;
     };
    
    deleteUser({id: 3}); // works
    deleteUser({job: "5"}); // doesn't work because id is required
    

    Tsplay:https://tsplay.dev/mpvJpw

    【讨论】:

    • user_id 和 id 相同。对不起,那是一个错字。我修好了。用例太多。我不想为所有这些声明接口。不干净。
    • 你去 :)
    猜你喜欢
    • 1970-01-01
    • 2020-04-26
    • 2015-10-11
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    相关资源
    最近更新 更多