Учитывая следующий интерфейс, какое будет допустимое присваиваемое значение?
interface A {
x: number,
y: never
}
Я ожидал, что const a: A = { x: 1 }
будет работать, но при этом возникает ошибка, указывающая, что поле y
является обязательным. Как только я помещаю туда y
, он говорит, что значение не может быть присвоено never
.
Мой реальный вариант использования выглядит примерно так:
interface Context<T extends MyRequest> {
id: string;
token: T extends AuthenticateRequest ? string : never;
}
interface AuthenticatedRequest extends MyRequest { ... }
Здесь я Я не могу создать значение для Context<MyRequest>
, так как он говорит, что token
отсутствует.
В настоящее время у меня есть обходной путь:
type Context<T extends MyRequest> = {
id: string;
} & (T extends AuthenticatedRequest ? {
token: string;
} : {})
, но по очевидным причинам это выглядит некрасиво. ..
Есть идеи, как мне это сделать правильно?