[[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] > } > ```