Typescript 打字稿:深偏?

Typescript 打字稿:深偏?,typescript,Typescript,有没有一种方法可以在TypeScript中指定一个分部类型,使所有子对象也成为分部对象?例如: 接口Foobar{ foo:数字; 酒吧:{ baz:布尔型; qux:字符串; }; } 常量foobar:Partial={ 傅:1,, 条:{baz:true} }; 这会引发以下错误: TS2741:类型“{baz:true;}”中缺少属性“qux”,但类型“{baz:boolean;qux:string;}”中需要属性“qux”。 有没有办法使子节点也成为部分节点?您只需创建一个新类型,例

有没有一种方法可以在TypeScript中指定一个分部类型,使所有子对象也成为分部对象?例如:

接口Foobar{
foo:数字;
酒吧:{
baz:布尔型;
qux:字符串;
};
}
常量foobar:Partial={
傅:1,,
条:{baz:true}
};
这会引发以下错误:

TS2741:类型“{baz:true;}”中缺少属性“qux”,但类型“{baz:boolean;qux:string;}”中需要属性“qux”。


有没有办法使子节点也成为部分节点?

您只需创建一个新类型,例如,
DeepPartial
,它基本上引用自身:

type DeepPartial<T> = {
    [P in keyof T]?: DeepPartial<T[P]>;
};
类型DeepPartial={
[P in keyof T]?:DeepPartial;
};
然后,您可以这样使用它:

const foobar: DeepPartial<Foobar> = {
  foo: 1,
  bar: { baz: true }
};
const foobar:DeepPartial={
傅:1,,
条:{baz:true}
};

.

如果您正在寻找一种快速简便的解决方案,请查看该软件包,它有许多有用的预构建类型脚本,包括
PartialDeep
类型


有关更具技术性和可定制的解决方案,请参阅。

type fest
似乎是一个更受欢迎的选项:谢谢!当使用jsdoc和vscode intellisense时,这甚至可以在普通的JS项目中工作。谢谢。查看
类型fest
的源代码有助于我了解当传递的类型包含
any
时,如何使我的
DeepPartial
实现工作。请注意,此线程中的一些人遇到了递归类型的性能问题: