【发布时间】:2022-06-21 10:41:45
【问题描述】:
我有这个代码:
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 之外的任何东西作为返回值类型:
函数缺少结束返回语句并且返回类型没有 包括“未定义”
如何以干净的方式解决此问题?
【问题讨论】:
-
没有什么能真正确保
type可以仅是这两个值。最后的代码并不是真的无法访问,因此您必须从中返回一些内容。 -
它与开关一起使用:tsplay.dev/mL4Zkm
-
@jonrsharpe 确实很有趣,很想知道为什么这种控制流结构的行为不同。
-
@Alejandro 参数是
Point或LineString,所以geometrie.type是"Point" | "LineString"。 -
@GuerricP
ifelse之所以有效,是因为它详尽没有任何类型信息;switch不是。但是ifelse if不起作用 即使编译器知道'Point'是geometrie.type的唯一剩余值。所以我猜这只是控制流分析的一个限制。
标签: typescript