ts联合类型的判断?


interface targetvecter { target: Vector }
interface targetunit { follow: unit }
type 目标坐标 = targetvecter | targetunit

function GetTarget(info: 目标坐标):Vector {
    return info.target ?? getOrigin(info.follow)
}

函数GetTarget中的 info.center会提示`类型“目标坐标”上不存在属性“target”。
类型“targetunit”上不存在属性“target”。`
函数GetTarget中的 info.follow会提示`类型“目标坐标”上不存在属性“follow”。
类型“targetvecter”上不存在属性“follow”`

如何处理掉这个报错?

===========================================
如果需要放到ide中,简单的上下文如下:

type unit = Object & { readonly _unit: never };
type Vector = Object&{readonly _x:never};
interface targetvecter {
    /** 终点或目标方向 */
    target: Vector

}
interface targetunit {
    /** 目标者 */
    follow: unit
}
type 目标坐标 = targetvecter | targetunit

declare function getOrigin(ent:unit):Vector;

function GetTarget(info: 目标坐标):Vector {
    return info.target ?? getOrigin(info.follow)
}
阅读 4.9k
2 个回答

你的示例中贴了很多和问题无关的代码。

但整体看下来,也没有任何一种类型定义了center属性。所以info.center会检查不通过也是正常的。
对于follow属性,因为只在targetunit接口上存在,而info是一个联合类型,所以需要你去断言info的具体类型才可以。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进