TypeScript リテラルをFilterする方法

文字リテラルのUnionから特定のリテラルだけ抽出したい場合。

例えば以下のような文字リテラルのUnion型があるとする。

type BeforeFilter = 'hoge' | 'foo' | 'poge' | 'poo'

poge と poo だけにしたいとする。以下のようにFilter型をつくり、ジェネリクスにフィルター対象の型とフィルターするキーの型を渡す。

type Filter<T, U> = T extends U ? T : never
type AfterFilter = Filter<BeforeFilter, 'poge' | 'poo'>