You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript如何实现优先使用全局类型、不存在时回退到本地类型

实现方案

核心通过 TypeScript 条件类型探测全局对象上的类定义,不存在则自动回退到兜底类型,以下是最简实现:

class MyClass {}

// 核心类型逻辑
type ResolvedClass = 
  typeof globalThis extends { SomeClass: abstract new (...args: any[]) => infer InstanceType } 
    ? InstanceType 
    : MyClass;

如果需要复用该逻辑,可以封装为通用泛型工具:

type GlobalClassFallback<GlobalClassName extends string, FallbackType> = 
  typeof globalThis extends { [K in GlobalClassName]: abstract new (...args: any[]) => infer T } 
    ? T 
    : FallbackType;

// 调用示例
type ResolvedClass = GlobalClassFallback<'SomeClass', MyClass>

场景验证

场景1:全局存在SomeClass定义

此时ResolvedClass会自动解析为SomeClass:

declare global {
  class SomeClass {}
}

class MyClass {}
type ResolvedClass = GlobalClassFallback<'SomeClass', MyClass>
// ResolvedClass 等价于 SomeClass,符合预期

场景2:全局不存在SomeClass定义

此时ResolvedClass会自动回退为MyClass:

class MyClass {}
type ResolvedClass = GlobalClassFallback<'SomeClass', MyClass>
// ResolvedClass 等价于 MyClass,符合预期

配套导出API

你提供的运行时实现可以和上述类型完全对齐,无需额外修改:

export const value: ResolvedClass = new ((globalThis as any).SomeClass ?? MyClass)();

用户使用该导出值时,会自动适配当前环境的全局类型定义,不存在时也能拿到MyClass的类型提示。

内容的提问来源于stack exchange,提问作者David Sherret

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:24:07