Я не знаю много о http
/ Request
в узле, но это, кажется, классический пример плохого моделирования (которое часто встречается в определениях @types/node
, либо из-за того, что типы имеютбыл написан или в базовый дизайн самого API-интерфейса node.js).
IncomingMessage
моделируется как тип продукта с дополнительными ключами, а не как правильный тип суммы - чтобы отличить регистр клиентазапрос от сервера сгенерирован один. Комментарии об инвариантах помещаются над отдельными полями, что делает их бесполезными с точки зрения проверки TS / статического типа.
Считая только это определение, лучше определить тип def:
interface ClientIncomingMessage extends stream.Readable {
// ... many other fields ...
url: string;
}
interface ServerIncomingMessage extends stream.Readable {
// ... many other fields ...
// no `url` fields here!
}
type IncomingMessage = ClientIncomingMessage | ServerIncomingMessage