/** * 全局 BMap SDK 访问入口。 * * SDK 脚本由 jsapi-loader 注入到全局(v3 为 `BMap`,v4 的 `BMapGL` 出于兼容 * 也会挂 `BMap` 别名)。这里集中收敛对全局对象的类型断言, * 避免在各 hook / 组件里散落 `(globalThis as any).BMap`。 * * 构造器签名直接取自官方类型包 `@baidumap/jsapi-v4-types` 的全局 `BMap` 命名空间, * 所以 `new SDK.Point(...)` 得到的是真正的 `BMap.Point`,而不是 `unknown`。 */ /// /** * 官方类型包尚未声明、但本库运行时确实会用到的构造器。 * * 这里只补「官方缺、我们用」的部分 —— 官方补齐后应当从此处删掉, * 而不是让手写声明和官方声明长期并存。 */ interface BMapSDKExtras { /** v4 的地图遮罩层,官方类型包未声明;见 components/Overlay/MapMask.tsx */ readonly MapMask: new (points: BMap.Point[], opts?: Record) => unknown; /** v4 的简易信息窗,官方类型包未声明;见 components/Overlay/SimpleInfoWindow.tsx */ readonly SimpleInfoWindow: new (content: string | HTMLElement, opts?: Record) => unknown; } /** * 运行时全局 SDK 对象的类型。 * * - `typeof BMap`:官方命名空间里的全部构造器与常量,带完整参数/返回值签名 * - `BMapSDKExtras`:补齐官方尚未声明的成员 * - 索引签名:v3/v4 之间成员存在差异,未知成员以 `unknown` 兜底,由调用方自行断言 * * 交集类型下,已声明的成员优先于索引签名解析,因此 `SDK.Point` 仍是精确类型。 */ export type BMapSDK = typeof BMap & BMapSDKExtras & { readonly [key: string]: unknown; }; /** * 获取全局 BMap SDK 对象;若脚本尚未注入则抛出清晰错误。 * 适用于随后直接访问 `SDK.Point` 等构造器的调用方 —— 相比原先返回 * undefined 后触发的 `Cannot read properties of undefined`,这里给出可读的失败原因。 */ export declare function getSDK(): BMapSDK; /** * 获取全局 BMap SDK 对象;未注入时返回 undefined。 * 供可优雅降级的调用方使用(如运行时常量回退、组件在 SDK 缺失时静默跳过)。 */ export declare function tryGetSDK(): BMapSDK | undefined; export {};