可以看看这个 issue:
https://github.com/microsoft/TypeScript/issues/39556这样就可以 work 了:
```ts
interface Elements {
div: { id: number; name?: string; color: string; x: string }
a: { id: number; name?: string; href: string; x: string }
}
declare function getProps<T extends Record<any, any>>(obj: T, keys: (keyof T)[]): void
type SimpleUnionOmit<T, K extends string | number | symbol> = T extends unknown ? Omit<T, K> : never
function Foo<T extends 'div' | 'a'>(tag: T, props: SimpleUnionOmit<Elements[T], 'x'>) {
getProps(props, ['id'])
}
```