Typescript 具有生成的ID的可选参数
假设我有一个用户界面Typescript 具有生成的ID的可选参数,typescript,Typescript,假设我有一个用户界面 export interface User { id: string; email: string; username: string; balance: number; } 这就是对象在我的数据库中保存的方式。创建新用户时,我想键入我创建的对象 const newUser = { email: 'test@test.com'; username: 'test'; balance: 12345; } as User 请注意,此处缺少id字段,
export interface User {
id: string;
email: string;
username: string;
balance: number;
}
这就是对象在我的数据库中保存的方式。创建新用户时,我想键入我创建的对象
const newUser = {
email: 'test@test.com';
username: 'test';
balance: 12345;
} as User
请注意,此处缺少id
字段,因为它是由数据库自动生成的
但是,如果我将id
设为可选字段,我可能会遇到类型“未定义”不可分配给类型“string”。
最好的方法是什么?第一个想法是有一个
PreDBUser
和一个User
,它扩展了is,但看起来很脏?我使用助手类型来实现这一点,它连接到如下主类型:
export type User {
id: string;
email: string;
username: string;
balance: number;
}
export type UserFields = keyof User
export type UserFieldsExtract<F extends UserFields> = Extract<UserFields, F>
export type UserPropsPick<P extends UserFields> = Pick<User, P>
// User type without id prop
const userWithoutId: UserPropsPick<'email' | 'username' | 'balance'> = {...}
导出类型用户{
id:字符串;
电子邮件:字符串;
用户名:字符串;
余额:数字;
}
导出类型UserFields=keyof用户
导出类型UserFieldsExtract=Extract
导出类型UserPropsPick=Pick
//没有id属性的用户类型
const userwithout id:UserPropsPick={…}
我为此使用了帮助器类型,它连接到主类型,如下所示:
export type User {
id: string;
email: string;
username: string;
balance: number;
}
export type UserFields = keyof User
export type UserFieldsExtract<F extends UserFields> = Extract<UserFields, F>
export type UserPropsPick<P extends UserFields> = Pick<User, P>
// User type without id prop
const userWithoutId: UserPropsPick<'email' | 'username' | 'balance'> = {...}
导出类型用户{
id:字符串;
电子邮件:字符串;
用户名:字符串;
余额:数字;
}
导出类型UserFields=keyof用户
导出类型UserFieldsExtract=Extract
导出类型UserPropsPick=Pick
//没有id属性的用户类型
const userwithout id:UserPropsPick={…}
用于从类型中删除属性:
export interface User {
id: string;
email: string;
username: string;
balance: number;
}
export type UserWithoutId = Omit<User, 'id'>
导出用户界面{
id:字符串;
电子邮件:字符串;
用户名:字符串;
余额:数字;
}
导出类型UserWithoutId=Omit
用于从类型中删除属性:
export interface User {
id: string;
email: string;
username: string;
balance: number;
}
export type UserWithoutId = Omit<User, 'id'>
导出用户界面{
id:字符串;
电子邮件:字符串;
用户名:字符串;
余额:数字;
}
导出类型UserWithoutId=Omit
在构造函数上,您可以将可选变量与?
一起使用(可选)
那么这个用法就不会抛出错误
const newUser = {
email: 'test@test.com';
username: 'test';
balance: 12345;
} as User
在构造函数上,您可以将可选变量与
?
一起使用(可选)
那么这个用法就不会抛出错误
const newUser = {
email: 'test@test.com';
username: 'test';
balance: 12345;
} as User
有一个内置的
Pick
type@UjinT34和什么?对不起,没有注意到你在使用它这里有一个内置的Pick
type@UjinT34和什么?对不起,没有注意到你在使用它这里没有typescheck,所以你可以做“省略”,你也需要导入用户类型。没有typescheck,所以你可以做“省略”,你也需要导入用户类型。