еще любые из типа
type PartialOmit<T, K extends keyof T> = Partial<T> & Omit<T, K>;
interface BaseEntity<T = any> {
property1: T;
property2: string;
property3: number;
}
type Stub = {};
export type ByDefault<T extends BaseEntity, K extends keyof T | Stub = Stub> = K extends Stub
? PartialOmit<T, 'property1'>
: K extends T
? PartialOmit<T, 'property1' | K>
: PartialOmit<T, 'property1'>;
type Entity = BaseEntity<{}> & {
property4: boolean;
};
export type EntityByDefault = ByDefault<Entity, 'property2'>;
выдает ошибку
Type '"property1" | K' does not satisfy the constraint 'keyof T'.
ожидаемый результат property1 и property2 необязательные
hello
Может как-то так? type ByOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>
Нет, зачем? Мне не общая утилита нужна, а конкретный тип который исключает по умолчанию конкретное поле property1 + все остальные перечисленные если есть, если их нет то только поле property1
Не K extends T, а K extends keyof T
Но ко всему остальному коду тоже вопросики, он делает не property1 и другие переданные ключи опциональными, он делает опциональными все остальные ключи, а переданные из типа стирает.
Обсуждают сегодня