TypeScript は構造的型システムを持っていますが、場合によっては(公称型システムのように)あらかじめ定義されたユニークなオブジェクトだけを受け入れ、required なフィールドを持つオブジェクトは受け入れないようにしたいこともあるでしょう。 引数にオブジェクトを受け取り、引数に含まれる全てのオブジェクトの文字列と数値のキー、およびこれらのキーの値のプロパティーを保持しながら、引数のオブジェクトとそれに含まれるネストしたオブジェクト全てをユニークにする型を実装します。 元の型と実装した型のアウトプットの型は相互に代入可能でなければなりませんが、同一の型であってはいけません。 例えば、 ```ts import { Equal } from '@type-challenges/utils'; type Foo = { foo: 2; bar: { 0: 1 }; baz: { 0: 1 } }; type UniqFoo = DeepObjectToUniqby null @uid11