結論
こんな感じのを作ると良さそう(多分、組み込みには無いはず)。
type Replace<T, U> = {
[P in keyof T]: P extends keyof U ? U[P] : T[P]
}
実例
リリース版の Nuxt Axios Module の retry の定義がおかしいので変更したかった(現在の dev ブランチでは修正済み)。
AxiosOptions {
// これを boolean | IAxiosRetryConfig にしたい
retry?: boolean
}
こんな感じでやろうとしたけどダメだった。
// こっちは OK
type CustomAxiosOptions = Omit<AxiosOptions, 'retry'> & { retry?: boolean | IAxiosRetryConfig }
// Configuration が extends Record<string, any> しているので、Omit が期待した結果にならない
type CustomConfiguration = Omit<Configuration, 'axios'> & { axios?: CustomAxiosOptions }
こんな感じにしたら期待通りの結果になった。
type Replace<T, U> = {
[P in keyof T]: P extends keyof U ? U[P] : T[P]
}
type CustomAxiosOptions = Replace<AxiosOptions, { retry?: boolean | IAxiosRetryConfig }>
type CustomConfiguration = Replace<Configuration, { axios?: CustomAxiosOptions }>