如何在 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 类型接口?