typescript - 使用全局类型或回退到本地类型
问题描述
我想要一个类型,globalThis.SomeClass
如果globalThis.SomeClass
存在,但MyClass
什么时候globalThis.SomeClass
不存在。
例如,它应该SomeClass
在这个例子中:
declare global {
class SomeClass {}
}
class MyClass {}
type ResolvedClass = /** ... */; // should equal `SomeClass`
MyClass
在此示例中,因为在SomeClass
全局范围内不存在:
class MyClass {}
type ResolvedClass = /** ... */; // should equal `MyClass`
这将允许我有一个 API 说导出一个值,如下所示:
export const value: ResolvedClass = new ((globalThis as any).SomeClass ?? MyClass)();
...然后当有人使用该值时,它将等于 的globalThis.SomeClass
类型,但如果他们的运行时环境没有这些类型,则有一个后备。最好的方法是什么?
这是我尝试过的一个示例:操场
解决方案
我不知道为什么,但是当全局扩充在同一个文件中完成时它不起作用。
Response
这是一个似乎适用于该类型的真实示例:
import * as undici from "undici";
type Response = (typeof globalThis) extends { "Response": { prototype: infer T } }
? T
: undici.Response;
const Response: (typeof globalThis) extends { "Response": infer T }
? T
: typeof undici.Response = (globalThis as any)["Response"] ?? undici.Response;