是否有一种方法可以在TypeScript中指定分部类型,使所有子对象也成为分部对象?例如:
interface Foobar {
foo: number;
bar: {
baz: boolean;
qux: string;
};
}
const foobar: Partial<Foobar> = {
foo: 1,
bar: { baz: true }
};
这将引发以下错误:
第一个月
有什么方法可以使子节点也成为局部的吗?
是否有一种方法可以在TypeScript中指定分部类型,使所有子对象也成为分部对象?例如:
interface Foobar {
foo: number;
bar: {
baz: boolean;
qux: string;
};
}
const foobar: Partial<Foobar> = {
foo: 1,
bar: { baz: true }
};
这将引发以下错误:
第一个月
有什么方法可以使子节点也成为局部的吗?
6条答案
按热度按时间zyfwsgd61#
您可以简单地创建一个新的类型,比如
DeepPartial
,它基本上引用了自身(2022年1月更新以处理可能的非对象):然后,您可以按如下方式使用它:
请参见TypeScript Playground上的概念验证示例。
bqf10yzr2#
如果您正在寻找一个快速而简单的解决方案,请查看type-fest包,其中包含许多有用的预构建TypeScript类型,包括
PartialDeep
类型。有关更具技术性和可定制性的解决方案,请参见this answer。
rkkpypqq3#
我从这个问题的答案中获得灵感,创建了自己的PartialDeep版本。
在此过程沿着,我偶然发现了内置对象的一些问题;对于我的用例,我不希望
Date
对象缺少它的一些方法。它要么在那里,要么不在那里。以下是我的版本:
ej83mcc04#
只需创建新类型
DeepPartial
当
DeepPartial
的属性是object
类型时,DeepPartial
基本上引用其自身以将DeepPartial
应用于该属性的属性,等等用法
TSPlayground示例
ttcibm8c5#
我不得不使用这个版本来防止数组包含未定义的元素:
cs7cruho6#
我发现上面的DeepPartial示例导致了我更复杂的接口的一些奇怪行为,但它们是一个很好的起点。下面是我决定创建一个非主观的DeepPartial(顺便说一下,也适用于非对象类型)