如何在 TypeScript 中构建自定义的必需接口?

Posted

技术标签:

【中文标题】如何在 TypeScript 中构建自定义的必需接口?【英文标题】:How to build a custom Required interface in 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']> )  ;

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

【问题讨论】:

【参考方案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 相同。对不起,那是一个错字。我修好了。用例太多。我不想为所有这些声明接口。不干净。 你去 :)

以上是关于如何在 TypeScript 中构建自定义的必需接口?的主要内容,如果未能解决你的问题,请参考以下文章

在 VS Code 和 TypeScript 中调试 Azure DevOps 自定义任务时如何设置输入变量

如何在 Vue Router v4 中为自定义元字段声明 TypeScript 类型接口?

Valor datepicker自定义区域设置

如何在 TypeScript 中迭代自定义文字类型?

JSF / PrimeFaces - 如何显示自定义验证器的消息,但不显示同一组件上的必需验证

如何在 TypeScript 中使用 Apollo Client 自定义钩子?