#typescript
Вопрос:
interface Info<
BodyType = undefined,
QueryStringType = undefined,
PathParamType = undefined,
ResponseType = undefined
> {
request: {
queryStrings: QueryStringType;
pathParameters: PathParamType;
body: BodyType;
};
response: ResponseType;
}
type InfoExtend = Info<{ name: string }>;
const a1: InfoExtend = {
request: {
body: { name: "a" },
},
};
У меня есть Info
тип, который является интерфейсом для описания конечной точки, и InfoExtend
это фактический тип для реализации конечной точки.
Проблема в том, a1
что у него ошибка типа:
Тип «{ тело: { имя: строка;};} «не содержит следующих свойств типа» {Строки запросов: не определены; Параметры пути: не определены; тело: { имя: строка;};}»: Строки запросов, параметры пути(2739)
Я понимаю это, потому queryStrings
pathParameters
что и. не являются необязательными
Вопрос в том, могу ли я сделать body
, queryStrings
и pathParameters
связанный с общим, таким образом, что, если я передам BodyType
общий , то body
будет Info.request.body
, если я не передам BodyType
, то Info.request
не должно быть никаких ошибок, и он должен содержать 1 из 3 (тело/строка запроса/параметры пути)
Ответ №1:
Вы можете решить эту проблему, сделав отсутствующие поля такими optional
:
interface Info<
BodyType = undefined,
QueryStringType = undefined,
PathParamType = undefined,
ResponseType = undefined
> {
request: {
queryStrings?: QueryStringType;
pathParameters?: PathParamType;
body: BodyType;
};
response?: ResponseType;
}
type InfoExtend = Info<{ name: string }>;
const a1: InfoExtend = {
request: {
body: { name: "a" },
},
};
Комментарии:
1. Спасибо, но они все еще есть в окончательном типе, если вы наберете a1.request., то
queryStrings
появятся, но они мне там не нужны, если я не передам их общий тип. Возможно ли это с текущими TS?2. Но в какой-то момент вам не нужно
queryString
,pathParameters
, иresponse
? Теперь они являются необязательными полями, что означает, что они не требуются дляrequest
. (Возможно, я неправильно понял ваш комментарий)