TypeScript не имеет встроенной поддержки программно изменяющих модификаторов, таких как ?
или readonly
для отдельных ключей типа объекта; см. microsoft / TypeScript # 32562 для запроса функции. Пока такие вещи не реализованы, вы можете создать что-то близкое себе, используя типы утилит Pick
и Omit
и пересечение . Следующая реализация SelectivePartial
использует прием с условным выводом типа , чтобы сделать окончательно отображаемый тип единым объектом, а не уродливым пересечением:
type SelectivePartial<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K> extends infer O ?
{ [P in keyof O]: O[P] } : never;
Тогда ваш NotifDefaultState
может быть определенным так:
export type NotifDefaultState = SelectivePartial<ReturnType<typeof getDefaultState>, "foo">;
/* type NotifDefaultState = {
foo?: any;
mainNotifMessage: string;
notifDetails: string;
severity: "info" | "error" | "warning" | "success" | undefined;
snackBarOpen: boolean;
} */
Хорошо, надеюсь, это поможет; удачи!
Детская площадка ссылка на код