PartialKeyPath<T> と、そのサブクラスである KeyPath<T, U> や WritableKeyPath<T, U> でオーバーロードして、 T に Self とか入れたときに後者が勝つ方法がなさそう。U を Any にしてしまえば勝てるだろうけど・・・。 (edited)Any にしても variance がうまく働かない?let a: KeyPath<[Int], Int> = \[Int].count let b: KeyPath<[Int], Any> = a