あるオブジェクトのこのフィールドを書き換えたいことあるでしょ。 type A: { x: X // => Yにしたい!!! } まあこういうときはA2 extends Aみたいなのを宣言するか,まあいろいろやりようはあると思うんですが,これがネストしてたりするわけですよ。5重とかに。毎回extendsとか書きたくないし,そのためにimportしたりinterface宣言みたいなのは書きたくない。宣言おことわり宣言。 そこでこういうのを作りました。先日のやつの焼き直しです。 // Tオブジェクトのプロパティキーのうち,Kを除いたものを返す。 // NotKeys<{ x: X, y: Y, z: Z }, "y"> === "x" | "z" になる type NotKeys<T, K> = { [P in keyof T]: P extends K ? never : P; }[keyof