Rarezas mecanografiadas:
export type MyType = 0 | 1 | 2;Esto funciona. Pero esto no:
export const ONE = 1; export const TWO = 2; export const THREE = 3; export type MyType = ONE | TWO | THREE;Con el segundo ejemplo, está en el espacio de tipos usando un valor (las constantes declaradas) para declarar un tipo. necesita usar el tipo de UNO DOS o TRES. En el primer ejemplo, 1 2 y 3 cuentan como tipos.
El problema es que está definiendo MyType como un tipo y está haciendo referencia a una variable. Entonces, lo que debe hacer para hacer coincidir tipos con tipos es solicitar el tipo de su valor. Puede hacerlo usando el operador typeof como:
export const ONE = 1; export const TWO = 2; export const THREE = 3; export type MyType = typeof ONE | typeof TWO | typeof THREE;En primer lugar, debe usar typeof, como se mencionó en la respuesta anterior.
En segundo lugar, si entiendo correctamente, desea crear un tipo que contenga exactamente estos 3 valores dados. Para hacer esto, necesita usar as const .
Por ejemplo:
export const A = 1 as const; export const B = 2 as const; export type MyType = typeof A | typeof B;y un ejemplo más útil para la variable const:
export const status = { FIRST: 1, SECOND: 2 } as const; export type StatusType = typeof status[keyof typeof status]; export interface IEntity { id: number; status: StatusType; } // You can use it elsewhere like this: const A: IEntity = { id: 1, type: status.FIRST };