有人知道一种方法吗(对于这个简单的示例),我如何使“字符串”类型的属性为可选,但同时保持属性的原始顺序?
由于在此示例中,必填项+可选属性彼此合并(除了将它们分离并合并在一起,所以不知道其他方式),因此'opt'属性移到末尾...
但我想将其保留在其原始位置,即使(我知道)它也不影响类型安全性,在每个属性都保留在其原始位置。
type A = {
a: boolean,
opt: string,
req: number,
}
export type RequiredProps<T extends object> = Exclude<string & keyof T, OptionalProps<T>>;
export type OptionalProps<T extends object> = {
[key in keyof T]: T[key] extends string ? key : never;
}[keyof T];
type OptionalStringProps<T extends object> =
{ [key in RequiredProps<T>]: T[key] } &
{ [key in OptionalProps<T>]?: T[key] }
;
type FlattenProps<T> = { [P in keyof T]: T[P] }
type OptionalA = FlattenProps<OptionalStringProps<A>>;
/*
Result:
OptionalA = {
a: boolean,
req: number;
opt?: string; <-- got moved to the end!
}
But what I'd like (original property order):
OptionalA = {
a: boolean,
opt?: string;
req: number;
}
*/
PS:FlattenProps仅用于不具有{...}和{...}交集,而用于单个对象类型。