Distinguir solo fecha del tipo "Date" fecha+hora en TypeScript
Me gustaría usar el sistema de tipos de TypeScript para distinguir variables que representan solo fechas (sin componente de hora) de variables con un tipo como Date que pueden representar fechas con hora (valores "fecha-hora").
Soy consciente, por supuesto, de que Date puede representar fechas, pero sin una distinción en el sistema de tipos creo que es más probable que mezcle mis intenciones sobre fechas y fechas y horas.
Un ejemplo de un sistema que hace esta distinción es la biblioteca datetime de Python, que tiene tanto los tipos date como datetime https://docs.python.org/3/library/datetime.html
Por ejemplo (pero la API no necesita ser exactamente así):
const date: OnlyDate = makeOnlyDate()
const datetime: Date = new Date()
date + datetime // type error: perhaps Operator '+' cannot be applied to types 'OnlyDate' and 'Date'
let datetime2: Date = date // type error: perhaps Type 'OnlyDate' is not assignable to type 'Date'
let date2: OnlyDate = datetime // type error: perhaps Type 'Date' is not assignable to type 'OnlyDate'
date.getSeconds // type error: Property 'getSeconds' does not exist on type ...
¿Cómo puedo hacer eso? Idealmente sin implementarlo yo mismo (es decir, una solución estándar sería ideal).
Respuesta #1
Creo que el término de Google que no acertaste del todo es "tipo de fecha del calendario". Hay un par de bibliotecas que proporcionan este tipo para Typescript. La que parece estar en un desarrollo más activo (y que no hace una elección extraña, más sobre eso a continuación) es calendar-date.
La otra opción es typescript-calendar-date, pero eso representa los meses como una cadena de tres caracteres, lo cual me parece desafortunado.