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,所以你可以做“省略”,你也需要导入用户类型。