如何使一个类构造函数成为Partial



对不起,如果标题不是太具体,我不知道我要做的事情的名称。

我有一个类

type Cvalues {
d: any;
e: any;
f: any;
}
class Character {
a: any;
b: any;
c: Cvalues
}

,我希望构造函数尽可能地接收它的所有属性,但我希望C是一个Partial,而不将C转换为C: Partial<CValues>

我"solution">

type CharacterConstructor = {
[K in keyof Character]? Character[K]
} & {
C?: Partial<Cvalues >
}

我想要角色被建造成:

new Character({
a: 1,
c: {
e: 2
}
)

new Character(
b: 3,
)

我为类的构造函数尝试了几种配置,我想要一个适合我需要的类型,但找不到它或一个接近的解决方案

如果您正在寻找的参数类型是:

type CharacterParams = {
a?: any;
b?: any;
c?: {
d?: any;
e?: any;
f?: any;
}
}

那么你似乎已经完成大部分了。您可以使用Partial<..>Omit<..>:

type Cvalues = {
d: any;
e: any;
f: any;
}
type CharacterValues = {
a: any;
b: any;
c: Cvalues;
}
class Character {
constructor(
{ a, b, c }:
Partial<
Omit<CharacterValues, "c">   // Replace .c ...
& { c: Partial<Cvalues> }  // ... with any subset of .c
>
) { /* constructor stuff */ }
}

沙箱

最新更新