- [[Mapped Types]] - [[Mapping Modifiers (TypeScript)|Mapping Modifiers]] - You can filter out keys by producing never via a conditional type: - これは[[条件付き型 (TypeScript)|条件付き型]]というより`Exclude`型のことかな.. (内部実装が[[条件付き型 (TypeScript)|条件付き型]]) - `type Exclude<T, U> = T extends U ? never : T;` - ** `Exclude`型の実装がこうなるのわからん** - ああ.. [[条件付き型は分配的 (TypeScript)|条件付き型は分配的]] かもしかして これのエラーがとれない。。 ```ts interface Config { optA: number optB: string optC: boolean optD: string[] } type Conf = {[K in keyof Config]?: boolean} // ^? const conf = { optB: true, optD: false, } as const satisfies Conf type TrueKey<T extends {[key: string]: boolean}> = {[K in keyof T]: T[K] extends true ? K : never}[keyof T] type NewConfig<T extends Conf> = Pick<Config, TrueKey<T>> type R = NewConfig<typeof conf> // ^? ```