首页 > 解决方案 > 使用全局类型或回退到本地类型

问题描述

我想要一个类型,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类型,但如果他们的运行时环境没有这些类型,则有一个后备。最好的方法是什么?

这是我尝试过的一个示例:操场

标签: typescript

解决方案


我不知道为什么,但是当全局扩充在同一个文件中完成时它不起作用。

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;

推荐阅读