Flow没有发现以下任何类型错误:
const a : Array<Object> = [{x:2}, {y:"hi"}];
const b : Array<SomeClass> = a;
SomeClass可以是类别或类型别名。
我是否需要启用此设置才能捕获此错误或预期?
答案 0 :(得分:4)
Object
等同于any
但仅限于对象类型(基元和数组(从Flow 0.30开始)不是any
集合的居民)。引自the docs on any
:
Object
同时是所有类型的超类型和所有类型的子类型。直观地说,任何值都可以取代“任何”其他值,而Flow将理解为良好类型。
由于any
与a
类似,当我们告诉Flow Array<Object>
是a
我们告诉它时“Object
是一个包含正确的数组类型......不管是什么“。由于SomeClass
是any
的子类型(请参见上文,关于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();
}
}
});