问题描述
export type MapType = "AdventureMap" | "GuidebookMap";
type MapContext = {|
mapType: MapType
|}
const context: MapContext = { mapType: "GuidebookMap" };
const { mapType } = context;
// A: no error in this line
if (mapType === "ABC-INVALID") {}
function fun(value: MapType) {
// B: error in this line
if (value === "123-INVALID") {}
}
// C: error in this line
fun(mapType);
在Flow中进行编译时,行B和C失败,因为它推断mapType
的类型为MapType | string
。为什么这样做呢?有办法改变吗?
我希望它像在Typescript上一样在A和B行上失败。
我可以这样做:
const mapType: MapType = context.mapType;
但是它有点超出目的,因为我被迫明确指定类型。另外,您不能在一个语句中“提取”多个属性,而我必须为每个语句指定类型。配置中是否有设置使其更像Typescript一样工作?
解决方法
您可以这样做 进行销毁时,可以指定类似的类型。 / * @流* /
export type MapType = "AdventureMap" | "GuidebookMap";
type MapContext = {|
mapType: MapType
|}
const context: MapContext = { mapType: "GuidebookMap" };
const { mapType }:{
mapType: MapType
} = context;
// A: no error in this line
if (mapType === "ABC-INVALID") {}
function fun(value: MapType) {
// B: error in this line
if (value === "123-INVALID") {}
}
// C: error in this line
fun(mapType);