- [[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>
// ^?
```