Кажется, что то, что я пытаюсь сделать, невозможно, но я действительно надеюсь, что это так.
По сути, у меня есть два интерфейса, и я хочу аннотировать один параметр функции как комбинацию обоих из них.
interface ClientRequest {
userId: number
sessionKey: string
}
interface Coords {
lat: number
long: number
}
И затем, в функции, я хочу сделать что-то вроде этого:
function(data: ClientRequest&Coords) { ... }
Итак, чтобы мой объект "data" мог содержать все члены обоих типов.
Я видел что-то, упоминаемое в (spec preview) [https://github.com/Microsoft/TypeScript/issues/805] в разделе "Объединение типов", но похоже, что это еще не сделал этого.
Если это невозможно, мое решение может выглядеть так:
interface ClientRequest<T> {
userId: number
sessionKey: string
data?: T
}
function(data: ClientRequest<Coords>) { ... }
Что будет работать в этом случае, хотя это не так динамично, как хотелось бы. Мне бы очень хотелось объединить несколько (2+) типов в самой аннотации:
function(data: TypeA&TypeB&TypeC) { ... }
Я бы предположил, что обычное решение состоит в том, чтобы определить тип, который расширяет эти типы, хотя это кажется менее гибким. Если я хочу добавить тип, мне придется либо (а) вернуться к объявлению и переписать его, либо (б) создать совершенно новый интерфейс. Не уверен, что я согласен с дополнительными накладными расходами.
Любые эксперты TypeScript должны указать мне в правильном направлении?