#typescript
#typescript
Вопрос:
Я пытаюсь добавить свойство в интерфейс запроса Express.
Это работает :
declare namespace Express {
export interface Request {
user?: string;
}
}
Это не :
import { UserCursor } from "./util/userCursor"; // UserCursor is a class
declare namespace Express {
export interface Request {
user?: UserCursor;
}
}
Ошибка, указанная во всех файлах, которые используют req.user
, но не в файле выше:
Property 'user' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs>'.
Почему? Как присвоить тип UserCursor
Express.Request.user
?
Ответ №1:
Единственное, что я знаю, что tsc
не будет принимать файлы, которые содержатся import/export
в области видимости с declare
ключевым словом, в качестве определения ввода, поэтому ваш приведенный выше код не работает.
Но вы могли import
бы на более низком уровне внутри declare
области видимости, что означает, что следующий код будет работать:
declare namespace Express {
export interface Request {
user?: import("./util/userCursor").UserCursor;
}
}
Ответ №2:
Для потомков один из ответов на этот вопрос следующий:
import { UserCursor } from "./util/userCursor";
declare global {
namespace Express {
export interface Request {
user?: UserCursor;
}
}
}
По какой-то причине, кажется, что все, что нужно, выполняет свою работу. declare global
ответ tmhao2005 выглядит лучше, и я слышал, что это не очень хорошая практика.