Я использую следующий тип Generic.
interface Bar {
bar: number,
foo: number,
baz?: number
}
class Foo implements Pick<Bar, 'foo' | 'baz'> {
}
Когда я пытаюсь использовать предложение для импорта отсутствующей реализации, по умолчанию выбираются все элементы. Как выбрать только те, которые требуются по умолчанию?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я нашел решение для идентификации дополнительных ключей в https://gist.github.com/eddiemoore/7873191f366675e520e802a9fb2531d8, но я понятия не имею, как это работает, даже после долгого изучения. Пытался упростить реализацию, поскольку, похоже, в нем много ненужных вещей, но у меня ничего не вышло. Это работает, но это волшебство.
type Undefined<T> = { [P in keyof T]: P extends undefined ? T[P] : never }
type FilterFlags<Base, Condition> = {
[Key in keyof Base]:
Base[Key] extends Condition ? Key : never
};
type AllowedNames<Base, Condition> =
FilterFlags<Base, Condition>[keyof Base];
type SubType<Base, Condition> =
Pick<Base, AllowedNames<Base, Condition>>;
type OptionalKeys<T> = Exclude<keyof T, NonNullable<keyof SubType<Undefined<T>, never>>>
//BLACK MAGIC IMPLEMENTATION ABOVE
interface Bar {
bar: number,
foo: number,
baz?: number
}
type OptionalBar = OptionalKeys<Bar>;
class Foo implements Omit<Bar,OptionalKeys<Bar>> {
}