[[TypeScript]]において、クラスやインターフェースの定義をoverrideしたいというIssueに対して提示された実装方法のこと。特定の[[プロパティ (TypeScript)|プロパティ]]を自由な型([[any型]]や[[unknown型]])に変換する。
```ts
type Weaken<T, K extends keyof T> = {
[P in keyof T]: P extends K ? any : T[P];
};
```
変換後にプロパティを上書きすれば、そちらで[[Narrowing]]される。
> [!hint]
> [[Overwrite型]]の方がシンプルでいいかもしれない。
> [!warning]
> [[Weaken型]]を使っても[[any型]]と推論されてしまうことがある。原因は謎。[[any型]]の代わりに[[unknown型]]を使ったら動いたりもしたが、あとで[[any型]]に戻しても問題なかった。。
> ```ts
> type Unknown<T, K extends keyof T> = {
> [P in keyof T]: P extends K ? unknown : T[P]
> }
> ```