Estoy de acuerdo en que, en la mayoría de los casos, este if (!(x instanceof Y)) {...}
es el mejor enfoque, pero en algunos casos crear unisY(x)
función para que puedaif (!isY(x)) {...}
vale la pena .
Soy un novato en mecanografía, y me he topado con esta pregunta de S / O varias veces en las últimas semanas, por lo que para los googlers, la forma de mecanografiar esto es crear una protección de letra como esta:
typeGuards.ts
export function isHTMLInputElement (value: any): value is HTMLInputElement {
return value instanceof HTMLInputElement
}
uso
if (!isHTMLInputElement(x)) throw new RangeError()
// do something with an HTMLInputElement
Supongo que la única razón por la que esto podría ser apropiado en mecanografiado y no js regular es que los protectores de tipografía son una convención común, por lo que si los escribe para otras interfaces, es razonable / comprensible / natural escribirlos también para las clases.
Hay más detalles sobre los protectores de tipo definidos por el usuario como este en los documentos
instanceof
tanto ...