我有这个代码:
import { Point, LineString } from 'geojson';
export function getIconPoint(geometrie: Point | LineString): Point {
if (geometrie.type === 'Point') {
return geometrie;
}
if (geometrie.type === 'LineString') {
return {
type: 'Point',
coordinates: geometrie.coordinates[0],
}
}
// unreachable
}
在两个if
语句之后,代码应该是不可达的,因为Point
和LineString
是基于type
字段区分的接口。TypeScript仍然不高兴,要求我返回一些东西,但我不想添加Point
以外的任何东西作为返回值类型:
函数缺少结束return语句,并且返回类型不包括"undefined"
我该怎么用干净的方式解决这个问题?
TypeScriptPlayground
2条答案
按热度按时间ee7vknir1#
如果要确保geometrie是枚举选项之一,可以在函数末尾抛出异常。
throw new Error("geometrie is neither Point nor LineString");
错误就会消失。
否则,我会采用OOD设计,在这种设计中,您可以使用dispatch而不是使用if语句检查类型。
6pp0gazn2#
在这种情况下,为什么不省略
else
呢?如果你只有两个选择...
同上,如果你有更多的选择btw,只需省略最后一个条件。
typescript 不应该抱怨,当它写成这样。
显然,为了使它更好,我们可能更喜欢使用排序的exhaustive type-checking函数。