可以将Array <object>分配给任何类的Array

时间:2016-08-17 03:28:11

标签: javascript flowtype

Flow没有发现以下任何类型错误:

const a : Array<Object> = [{x:2}, {y:"hi"}];
const b : Array<SomeClass> = a;

SomeClass可以是类别或类型别名。

我是否需要启用此设置才能捕获此错误或预期?

1 个答案:

答案 0 :(得分:4)

Flow中的

Object等同于any但仅限于对象类型(基元和数组(从Flow 0.30开始)不是any集合的居民)。引自the docs on any

  

Object同时是所有类型的超类型和所有类型的子类型。直观地说,任何值都可以取代“任何”其他值,而Flow将理解为良好类型。

由于anya类似,当我们告诉Flow Array<Object>a我们告诉它时“Object是一个包含正确的数组类型......不管是什么“。由于SomeClassany的子类型(请参见上文,关于Array<SomeClass>),因此可以指定给a

修复方法是将type SomeType = {x: number} | {y: string} const a: Array<SomeType> = [{x:2}, {y:"hi"}]; 标记为mixed或其类型(即使该类型是联合类型):

googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
    @Override
    public void onMapClick(LatLng position) {
           //Get the lat long here from variable position
           //Use GeoCoder class to fetch the country from latlong like this
           Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault()); 
           List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);         
           if(addresses.size() > 0){
               String country = addresses.get(0).getCountryName();
           }
    }
});