Typescript 我如何制作“部分<;T>;`但仅适用于可为空的字段?
我需要一个类似映射类型的Typescript 我如何制作“部分<;T>;`但仅适用于可为空的字段?,typescript,Typescript,我需要一个类似映射类型的Partial,它允许我将可空字段设置为可选字段。我正在努力输入我们的ORM,它在可空字段上将未定义强制为空 我想买一种 interface User { email: string name: string | null } 使 interface User { email: string name?: string | null } 我试过了 type NullablePartial<T> = { [P in keyof T]: T[P
Partial
,它允许我将可空字段设置为可选字段。我正在努力输入我们的ORM,它在可空字段上将未定义强制为空
我想买一种
interface User {
email: string
name: string | null
}
使
interface User {
email: string
name?: string | null
}
我试过了
type NullablePartial<T> = { [P in keyof T]: T[P] extends null ? T[P] | undefined : T[P] }
type nullableportial={[P in keyof T]:T[P]扩展null?T[P]|未定义:T[P]}
但是extensednull
不适用于null
和另一种类型的联合(理想情况下,我希望它能处理多个字符串)。可选字段和未定义值之间的差异很重要
我能做什么呢?我想我不确定这与使用可选接口属性的区别 比如:
export interface foo {
bar?: string; // nullable
baz: string;
bat: boolean;
etcd?: boolean; // nullable
}
在您的情况下,这不起作用吗?在TypeScript中,使类型函数只转换一些可选或非可选的属性实际上是非常烦人的,因为没有简单的方法来描述它。我所能想到的最简单的方法就是用复数加一个。只要您传入的类型没有索引签名(它会变得更复杂),这里就应该有一些功能:
在我看来很合理。。。这接近你想要的吗?祝你好运。让我们从查找哪些属性可为空开始
type NullablePropertyOf<T> = {
[K in keyof T]: null extends T[K]
? K
: never
}[keyof T]
我们的最终产品是通过将整个T
的弱部分版本与假定不受影响的属性合并而创建的
type NullablePartial<T> = Partial<T> & Omit<T, NullablePropertyOf<T>>;
type nullableportial=Partial&省略;
当然,有不止一种方法可以做到这一点。在这个例子中,我选择了所有的东西,并要求所需的东西。您可以采取相反的方法:首先选择不可为null的字段,然后对可为null的字段进行选项化,然后合并这两种类型。任何适合你的。尝试
null扩展T[p]?
而不是T[p]扩展null?
,因为你问null
是否可分配给T[p]
(string | null
“yes”代表string
),而不是T[p]
是否可分配给null
(除非T[p],否则这只是“否”)
为null
或从不
)当然,这不会使新的用户
具有可选属性,只会将|未定义的
添加到值类型中。真正的答案会有点复杂。在离开数据库的过程中,这些值实际上是空的。来自这些值的错误消息太疯狂了!但它是有效的!非常感谢你!什么错误消息?在我的环境中看不到任何
type NullablePropertyOf<T> = {
[K in keyof T]: null extends T[K]
? K
: never
}[keyof T]
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
type NullablePartial<T> = Partial<T> & Omit<T, NullablePropertyOf<T>>;