#typescript #class #typescript-typings #return-type #typeof
#машинописный текст #класс #typescript-типизация #возвращаемый тип #typeof
Вопрос:
Я использую библиотеку, которая предоставляет SDK, но не тип ( UserModule
) одного из объектов ( user
), которые вы можете создать с его помощью.
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);
};
// ...
}
Как вы можете видеть, мне нужен доступ к UserModule
тому, к useState
чему у меня нет доступа (потому что я не могу этого сделать 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
-тип.
Комментарии:
1. К вашему сведению, существует встроенный тип утилиты
InstanceType
: typescriptlang.org/docs/handbook / … Но, похоже, на самом деле это не то, что вам здесь нужно.
Ответ №1:
Вы можете использовать type
псевдоним из конструктора:
type UserModule = Magic['user'];