TypeScript 获取 class 个实例的类型

TypeScript obtain type for class instance

我正在使用公开 SDK 的 library,但不公开您可以使用它创建的其中一个对象 (user) 的类型 (UserModule)。

import { Magic } from 'magic-sdk';

// ...

function useMagicLinkAuthentication() {
  const [magicReady, setMagicReady] = usePromise<Magic>();
  const [isMagicInitialized, setMagicInitialized] = useState(false);
  const [user, setUser] = useState<UserModule | null>(null);

  // ...

  const signIn = async (email: string) => {
    const magic = await magicReady;

    if (await magic.user.isLoggedIn()) {
      return setUser(magic.user);
    }

    await magic.auth.loginWithMagicLink({ email });
    return setUser(magic.user);
  };

  // ...
}

如您所见,我需要访问 useState 中的 UserModule,但我无权访问(因为我无法访问 import { UserModule } from 'magic-sdk';.

函数有 ReturnType。所以如果我有一个常规函数,我可以这样做:

export const createFoo = () => { /* ... returns a Foo ... */ } 
export type Foo = ReturnType<typeof createFoo>;

TypeScript 中是否有 类 的等效项,以便我可以访问 new MyClass 的实例并获取

// broken pseudo-code
export type Foo  = Something<typeof MyClass.foo>

?

我需要以某种方式获得 typeof magic.user 又名 UserModule 类型。

您可以使用构造函数的 type 别名:

type UserModule = Magic['user'];