给定以下条件:
// External code, can't change
type Point = {
x: number;
y: number;
};
export const getPointData: (Point | Point[]) = (id: number) => {
return getPoints(id);
}
// Our code
import { getPointData } from "something";
const pointData = getPointData(0); // returns as Coordinates | Coordinates[]
现在我可以在这里检查坐标的类型,但点不是从库中导出的,所以我认为这有点黑客。我也可以检查数据是否是数组,但问题是是否有更简洁的方法。
这是我目前的解决方案。这是唯一的路吗?
const points = Array.isArray(pointData) ?
{ pointData[0].x, pointData[0].x } :
{ pointData.x, pointData.x }
是的,isArray
技术是合法的,确实是最好的方法。对于并集,编译器需要类型缩小才能计算出类型。isArray
检查对TypeScript编译器和JS运行时都有效,因此您可以通过一个简单的调用来了解两者。