0

Map または Vector のいずれかを返す可能性のあるメソッドがあり、両方の型が実装されているためKeyedIterable(Vector<T>具体的には実装されているため)、両方のケースを戻り値の型KeyedIterable<int, T>でカバーできると考えました。KeyedIterable<arraykey, T>ただし、arraykeyは よりも一般的なタイプですがint、これは機能しません。たとえば、タイプチェッカーは次のコードで問題を報告します。

<?hh // strict
class A {
   public static function foo(): KeyedIterable<arraykey, mixed> {
      return Vector{};
      /*
      Invalid return type (Typing[4110])
      This is an array key (int/string)
      It is incompatible with an int
      Considering that this type argument is invariant with respect to KeyedIterable
      */
   }
}

なぜ私はこれを行うことができないのですか?

4

1 に答える 1